public Iteratee <D, A> ContraSelect <D>(Func <D, E> f) { return(Fold( (a, i) => Iteratee <D, A> .Done(a, i.IsEof ? Input <D> .Eof() : Input <D> .Empty()) , r => Iteratee <D, A> .Cont(i => r(i.Select(f)).ContraSelect(f)) )); }
public static Iteratee <E, B> SelectMany <E, A, B>(this Iteratee <E, A> k, Func <A, Iteratee <E, B> > f) => k.Fold( (a, i) => i.IsEmpty ? f(a) : f(a).Fold( (b, _) => Iteratee <E, B> .Done(b, i) , s => s(i) ) , r => Iteratee <E, B> .Cont(u => r(u).SelectMany(f)) );
public Iteratee <E, A> Done <A>(A a) { return(Iteratee <E, A> .Done(a, this)); }
public static Iteratee <E, B> Select <E, A, B>(this Iteratee <E, A> k, Func <A, B> f) { return(k.SelectMany <E, A, B>(a => Iteratee <E, B> .Done(f(a), Input <E> .Empty()))); }
public Iteratee <E, A> Done <A>(A a) => Iteratee <E, A> .Done(a, this);