public static TR Else <T, TR>(this ConditionalContinuation <T, TR> continuation, Func <T, TR> returns) => continuation.Result.Match <TR>(Some: identity, None: () => returns(continuation.Value));
public static Task <ConditionalContinuation <T, TR> > Cond <T, TR>(this ConditionalContinuation <T, TR> continuation, Func <T, bool> condition, Func <T, Task <TR> > returns) => continuation.Result.Match ( Some: result => FromResult(new ConditionalContinuation <T, TR>(continuation.Value, result)), None: () => Cond <T, TR>(continuation.Value, condition, returns) );
public static Task <TR> Else <T, TR>(this ConditionalContinuation <T, TR> continuation, Func <T, Task <TR> > returns) => continuation.Result.Match <Task <TR> >(Some: FromResult, None: async() => await returns(continuation.Value));
public static ConditionalContinuation <T, TR> Cond <T, TR>(this ConditionalContinuation <T, TR> continuation, Func <T, bool> condition, Func <T, TR> returns) => continuation.Result.Match <ConditionalContinuation <T, TR> > ( Some: (result) => new ConditionalContinuation <T, TR>(continuation.Value, result), None: () => Cond <T, TR>(continuation.Value, condition, returns) );