アレ?
rust の impl trait が返り値に指定されてるのは多相型じゃなかった?
Haskellの

( Num A ) -> [ A ]

とかの糖衣表現でしょ?
上のはstd::iter::Iteratorのtraitのインスタンスは全部取れるんじゃないの?