public X Fold <X>(Func <Func <int, A>, X> r, Func <Func <string, A>, X> rl, Func <WriteOp <A>, X> p) => val.Fold(d => d.Fold(r, rl), p);
public static Either <X, B> SelectMany <X, A, B>(this Either <X, A> k, Func <A, Either <X, B> > f) { return(k.Fold(x => Either <X, B> .Left(x), f)); }
public X Fold <X>(Func <A, Input <E>, X> done, Func <Func <Input <E>, Iteratee <E, A> >, X> cont) => val.Fold(pair => pair.Fold(done), cont);
public static Either <X, B> Select <X, A, B>(this Either <X, A> k, Func <A, B> f) { return(k.Fold(x => Either <X, B> .Left(x), a => Either <X, B> .Right(f(a)))); }
public static Either <X, A> SelectLeft <X, A, B>(this Either <B, A> k, Func <B, X> f) { return(k.Fold(x => Either <X, A> .Left(f(x)), a => Either <X, A> .Right(a))); }