public static TryAsync <A> Interpret <A>(this Free <A> ma, InterpreterProps props) => TryAsync(async() => { var current = Node(ma); while (!current.IsLeaf) { current = await InternalInterpret(current.Next, props) .IfFailThrow(); } return(current.Value); });
static TryAsync <Node <A> > InternalInterpret <A>(this Free <A> action, InterpreterProps props) => action switch {
public static Free <B> Bind <A, B>(this Free <A> ma, Func <A, Free <B> > f) => ma switch {