1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
use super::*;

pub trait Fold: ListFn {
    fn fold(mut self) -> Self::End {
        loop {
            match self.list() {
                List::Some(_, next) => self = next,
                List::End(end) => return end,
            }
        }
    }
}

impl<S: ListFn> Fold for S {}