1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
pub trait TailRec: Sized {
    #[inline]
    fn tailrec<B, F>(self, f: F) -> B where F: Fn(Self) -> Result<Self, B> {
        let mut res = f(self);
        loop { match res {
            Ok (v) => { res = f(v); }
            Err(e) => { return e }
        }}
    }
}

impl<A> TailRec for A {}