public Func <Unit, int> Count(TryOptionAsync <A> ma) => _ => Inst.Match(ma, x => 1, () => 0);
public Task <Unit> MatchAsync(TryOptionAsync <A> opt, Func <A, Task> SuccAsync, Action Fail) => opt.MatchAsync( SuccAsync: SuccAsync, Fail: Fail);
static Task <bool> Eq <A>(TryOptionAsync <Task <A> > ma, TryOptionAsync <Task <A> > mb) => EqAsyncClass <TryOptionAsync <Task <A> > > .EqualsAsync(ma, mb);
public Task <B> MatchUnsafe <B>(TryOptionAsync <A> opt, Func <A, B> Succ, Func <B> Fail) => opt.MatchUnsafe( Succ, None: () => Fail(), Fail: _ => Fail());
public Task <B> MatchUnsafeAsync <B>(TryOptionAsync <A> opt, Func <A, Task <B> > SuccAsync, Func <Task <B> > FailAsync) => opt.MatchAsync( SomeAsync: SuccAsync, NoneAsync: FailAsync, FailAsync: _ => FailAsync());
public Task <S> BiFoldBackAsync <S>(TryOptionAsync <A> ma, S state, Func <S, A, Task <S> > SuccAsync, Func <S, Unit, Task <S> > FailAsync) => default(MTryOptionFirstAsync <A>).MatchAsync(ma, x => SuccAsync(state, x), () => FailAsync(state, unit));
public Task <B> Match <B>(TryOptionAsync <A> opt, Func <A, B> Succ, Func <B> Fail) => opt.Match( Succ, None: Fail, Fail: _ => Fail());
public Task <Unit> MatchAsync(TryOptionAsync <A> opt, Action <A> Some, Action None) => opt.Match( Some, None: () => None(), Fail: _ => None());
public static Aff <TryOptionAsync <A> > Sequence <A>(this TryOptionAsync <Aff <A> > mma) => mma.Traverse(identity);
public Task <B> MatchAsync <B>(TryOptionAsync <A> opt, Func <A, B> Some, Func <B> None) => opt.Match( Some, None: () => None(), Fail: _ => None());
public Task <B> MatchUnsafeAsync <B>(TryOptionAsync <A> opt, Func <A, Task <B> > Some, Func <Task <B> > None) => opt.Match( Some, None: () => None(), Fail: _ => None());
public Task <bool> IsSomeAsync(TryOptionAsync <A> opt) => opt.Map(x => true).IfNoneOrFail(false);
public Task <bool> IsUnsafeAsync(TryOptionAsync <A> opt) => Task.FromResult(default(MTryOptionAsync <A>).IsUnsafe(opt));
public Task <S> BiFoldBackAsync <S>(TryOptionAsync <A> ma, S state, Func <S, A, Task <S> > fa, Func <S, Unit, Task <S> > fb) => default(MTryOptionAsync <A>).MatchAsync(ma, x => fa(state, x), () => fb(state, unit));
public TryOptionAsync <A> Append(TryOptionAsync <A> x, TryOptionAsync <A> y) => Plus(x, y);
public static Aff <TryOptionAsync <B> > Sequence <A, B>(this TryOptionAsync <A> ta, Func <A, Aff <B> > f) => ta.Map(f).Sequence();
public Task <S> BiFoldBack <S>(TryOptionAsync <A> ma, S state, Func <S, A, S> Succ, Func <S, Unit, S> Fail) => default(MTryOptionFirstAsync <A>).Match(ma, x => Succ(state, x), () => Fail(state, unit));
public static ValueTask <TryOptionAsync <B> > Sequence <A, B>(this TryOptionAsync <A> ta, Func <A, ValueTask <B> > f) => ta.Map(f).Sequence();
public Task <bool> IsNone(TryOptionAsync <A> opt) => opt.Map(x => false).IfNoneOrFail(true);
public Task <int> GetHashCodeAsync(TryOptionAsync <A> x) => default(HashableTryOptionAsync <EqA, A>).GetHashCodeAsync(x);
public Task <B> MatchAsync <B>(TryOptionAsync <A> opt, Func <A, B> Succ, Func <Task <B> > FailAsync) => opt.MatchAsync( Succ, NoneAsync: FailAsync, FailAsync: async _ => await FailAsync().ConfigureAwait(false));
public Task <bool> EqualsAsync(TryOptionAsync <A> x, TryOptionAsync <A> y) => default(ApplTryOptionAsync <A, bool>) .ApplyOption(default(EqOption <A>).Equals, x, y) .IfNoneOrFail(false);
public Task <B> MatchUnsafeAsync <B>(TryOptionAsync <A> opt, Func <A, Task <B> > SuccAsync, Func <B> Fail) => opt.MatchAsync( SuccAsync, None: Fail, Fail: _ => Fail());
public TryOptionAsync <A> BindReturn(Unit _, TryOptionAsync <A> mb) => mb;
public Task <Unit> Match(TryOptionAsync <A> opt, Action <A> Succ, Action Fail) => opt.Match( Succ, None: Fail, Fail: _ => Fail());
public Func <Unit, Task <S> > FoldBackAsync <S>(TryOptionAsync <A> ma, S state, Func <S, A, Task <S> > f) => _ => ma.MapAsync(a => f(state, a)).IfNoneOrFail(state);
public Task <Unit> MatchAsync(TryOptionAsync <A> opt, Func <A, Task> SuccAsync, Func <Task> FailAsync) => opt.MatchAsync( SuccAsync: SuccAsync, FailAsync: FailAsync);
public Func <Unit, Task <int> > Count(TryOptionAsync <A> ma) => _ => ma.Map(a => 1).IfNoneOrFail(0);
public static TryOptionAsync <T> product <NUM, T>(TryOptionAsync <T> lhs, TryOptionAsync <T> rhs) where NUM : struct, Num <T> => lhs.Product <NUM, T>(rhs);
public S BiFoldBack <S>(TryOptionAsync <A> ma, S state, Func <S, A, S> fa, Func <S, Unit, S> fb) => Match(ma, x => fa(state, x), () => fb(state, unit));