>>907
そのresume()周りのごちゃごちゃしてる部分
既存のメソッド二つnext(), into_iter()定義したらシンプルになったよ
既存の関数名変数名などはそのまま

type Gen<T> = Pin<Box<dyn Coroutine<(), Yield = T, Return = ()>>>;

fn prime_generator() -> Gen<usize> {
Box::pin(#[coroutine] || {
let mut g = generate();
while let Some(prime) = g.next() {
yield prime;
g = filter(g, prime);
}
})
}

fn generate() -> Gen<usize> {
Box::pin(#[coroutine] || {
for i in 2.. {
yield i;
}
})
}

fn filter(g: Gen<usize>, prime: usize) -> Gen<usize> {
Box::pin(#[coroutine] move || {
for i in g.into_iter() {
if i % prime != 0 { yield i; }
}
})
}