>>50
登場していたSomeは値付きenumなのでデータの型です
mapは変換するだけなのでそれ自体にループ要素はないです
一方でfindなどはループを内包している高階関数になりますね
だから>>49にて「今回は可能ならばループを直接使わずに高階関数イテレータ使用」と書いたのです

宿題となっていた類似部分を別関数へ切り出しが出来ました
これでわかりやすくなったでしょうか?

fn prime<T>() -> Unfold<T, impl FnMut(&mut T) -> Option<T>>
 where T: Copy + num::Zero + num::One + num::CheckedAdd + std::cmp::PartialOrd,
{
 unfold(T::one(), |a| {
  inc(*a, T::one(), |x| x > T::zero()) // 無条件に+1していき次の素数を探す
  .inspect(|b| *a = *b) // unfoldのため値更新
  .find(|b| inc(T::one(), T::one(), |x| x < *b) // 自分より小さい数で+1していき約数を見つける
   .all(|c| inc(T::zero(), c, |x| x <= *b) // その約数の候補を自分以下で足し算していく
     .all(|d| d != *b)))}) // 自分が倍数になっていなければOK
}

fn inc<T>(s: T, a: T, f: impl Fn(T) -> bool) -> Unfold<T, impl FnMut(&mut T) -> Option<T>>
 where T: Copy + num::Zero + num::One + num::CheckedAdd + std::cmp::PartialOrd,
{
 unfold(s, move |x| { *x = x.checked_add(&a)?; f(*x).then(|| *x) })
}