public static Task <Option <TFailure> > Failure <TSuccess, TFailure>(this Task <Result <TSuccess, TFailure> > result) => result.Match(_ => Option.None <TFailure>(), Option.Some);
public static Task <Option <TSuccess> > Success <TSuccess, TFailure>(this Task <Result <TSuccess, TFailure> > result) => result.Match(Option.Some, _ => Option.None <TSuccess>());
public static Option <TSuccess> ToOption <TSuccess, TFailure>(this Result <TSuccess, TFailure> result) => result.Match(Option.Some, _ => Option.None <TSuccess>());
public static Task <Result <Option <TResult>, TFailure> > BindIfSomeAsync <TSuccess, TFailure, TResult>(this Result <Option <TSuccess>, TFailure> result, Func <TSuccess, Task <Result <Option <TResult>, TFailure> > > bind) => result.BindAsync(success => success.MatchAsync(bind, () => Task.FromResult(Result.Success <Option <TResult>, TFailure>(Option.None <TResult>()))));
public static Result <Option <TResult>, TFailure> BindIfSome <TSuccess, TFailure, TResult>(this Result <Option <TSuccess>, TFailure> result, Func <TSuccess, Result <Option <TResult>, TFailure> > bind) => result.Bind(success => success.Match(bind, () => Result.Success <Option <TResult>, TFailure>(Option.None <TResult>())));
public static Task <Result <Option <TResult>, TFailure> > BindIfSomeAsync <TSuccess, TFailure, TResult>(this Result <Option <TSuccess>, TFailure> result, Func <TSuccess, Task <Result <TResult, TFailure> > > bind) => result.BindAsync(success => success.MatchAsync(async value => (await bind(value)).Select(Option.Some), () => Task.FromResult(Result.Success <Option <TResult>, TFailure>(Option.None <TResult>()))));