public static Task <IFailableResult <TNewResult, TFailure> > OnSuccessAsync <TResult, TFailure, TNewResult>(
     this IFailableResult <TResult, TFailure> result,
     Func <TResult, Task <IFailableResult <TNewResult, TFailure> > > onSuccessAsync
     ) =>
 result.Handle(
     onSuccessAsync,
     f => FailureResult <TNewResult, TFailure> .CreateAsync(f));
 public static Task <IFailableResult <TNewResult, TFailure> > OnSuccessAsync <TResult, TFailure, TNewResult>(
     this Task <IFailableResult <TResult, TFailure> > asyncResult,
     Func <TResult, Task <IFailableResult <TNewResult, TFailure> > > onSuccessAsync,
     bool configureAwait = false
     ) =>
 asyncResult.HandleAsync(
     onSuccessAsync,
     f => FailureResult <TNewResult, TFailure> .CreateAsync(f),
     configureAwait);