1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pub struct ListSome<F: ListFn> {
pub first: F::Item,
pub next: F,
}
pub enum ListState<F: ListFn> {
Some(ListSome<F>),
End(F::End),
}
impl<F: ListFn> ListState<F> {
pub fn some(first: F::Item, next: F) -> Self {
ListState::Some(ListSome { first, next })
}
pub fn unwrap(self) -> ListSome<F> {
match self {
ListState::Some(v) => v,
ListState::End(_) => panic!(),
}
}
}
pub trait ListFn: Sized {
type Item;
type End;
fn next(self) -> ListState<Self>;
}