public IKind <OptionF, TB> Ap <TA, TB>(IKind <OptionF, Func <TA, TB> > ff, IKind <OptionF, TA> fa) { var f = ff.Fix(); var a = fa.Fix(); return(f.IsSome && a.IsSome ? (IKind <OptionF, TB>) new Some <TB>(f.Get()(a.Get())) : new None <TB>()); }
public IKind <OptionF, TB> FlatMap <TA, TB>(IKind <OptionF, TA> fa, Func <TA, IKind <OptionF, TB> > f) => fa.Fix().FlatMap(x => f(x).Fix());
public IKind <OptionF, TB> Map <TA, TB>(IKind <OptionF, TA> fa, Func <TA, TB> f) => fa.Fix().Map(f);
public bool EqK <T>(IKind <OptionF, T> x, IKind <OptionF, T> y, IEq <T> eq) => OptionK.Eq(eq).Eqv(x.Fix(), y.Fix());
public IKind <OptionF, TB> XMap <TA, TB>(IKind <OptionF, TA> fa, Func <TA, TB> f, Func <TB, TA> g) => fa.Fix().Map(f);
public IKind <TryF, TB> Ap <TA, TB>(IKind <TryF, Func <TA, TB> > ff, IKind <TryF, TA> fa) => ff.Fix().FlatMap(fa.Fix().Map);
public IKind <ResultOkF <TError>, TB> FlatMap <TA, TB>( IKind <ResultOkF <TError>, TA> fa, Func <TA, IKind <ResultOkF <TError>, TB> > f) => fa.Fix().FlatMap(x => f(x).Fix());
public IKind <ResultOkF <TError>, TB> Map <TA, TB>(IKind <ResultOkF <TError>, TA> fa, Func <TA, TB> f) => fa.Fix().Map(f);
public IKind <ResultOkF <TError>, TB> Ap <TA, TB>(IKind <ResultOkF <TError>, Func <TA, TB> > ff, IKind <ResultOkF <TError>, TA> fa) => ff.Fix().FlatMap(fa.Fix().Map);
public IKind <TreeF, TB> Map <TA, TB>(IKind <TreeF, TA> fa, Func <TA, TB> f) => fa.Fix() switch {