metatrait 0.0.0-alpha.1

RPITIT Monads
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use either::Either;

use super::functor::*;

pub trait BaseIterateFn<Wr: ?Sized + BaseWrap>: Sized {
    type Out;
    fn run(self) -> Wr::Wrap<Either<Self, Self::Out>>;
}

pub trait BaseIterateFnExt<Wr: ?Sized + BaseIterate>: BaseIterateFn<Wr> {
    fn run_iterate(self) -> Wr::Wrap<Self::Out> {
        Wr::iterate(self)
    }
}

impl<Wr: ?Sized + BaseIterate, F: BaseIterateFn<Wr>> BaseIterateFnExt<Wr> for F {}