public Task <Unit> MatchAsync(TryOptionAsync <A> opt, Func <A, Task> SuccAsync, Action Fail) =>
 opt.MatchAsync(
     SuccAsync: SuccAsync,
     Fail: Fail);
 public Task <Unit> MatchAsync(TryOptionAsync <A> opt, Func <A, Task> SuccAsync, Func <Task> FailAsync) =>
 opt.MatchAsync(
     SuccAsync: SuccAsync,
     FailAsync: FailAsync);
 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 <B> MatchUnsafeAsync <B>(TryOptionAsync <A> opt, Func <A, Task <B> > SuccAsync, Func <B> Fail) =>
 opt.MatchAsync(
     SuccAsync,
     None: Fail,
     Fail: _ => Fail());
 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());
 public static Task <R> match <A, R>(TryOptionAsync <A> self, Func <A, Task <R> > Some, Func <Task <R> > None, R Fail) =>
 self.MatchAsync(Some, None, Fail);
 public Task <B> Fail(Func <Exception, Task <B> > f) =>
 value.MatchAsync(succHandler, noneHandler, f);