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
use crate::hkt::HKT; pub trait Chain<B>: HKT<B> { fn chain<F>(self, f: F) -> <Self as HKT<B>>::Target where F: FnOnce(<Self as HKT<B>>::Current) -> <Self as HKT<B>>::Target; } impl<A, B> Chain<B> for Option<A> { fn chain<F>(self, f: F) -> Self::Target where F: FnOnce(A) -> <Self as HKT<B>>::Target, { self.and_then(f) } } impl<A, B, E> Chain<B> for Result<A, E> { fn chain<F>(self, f: F) -> Self::Target where F: FnOnce(A) -> <Self as HKT<B>>::Target, { self.and_then(f) } }