Variable Recursive

Recursive: {
    done: (<Out>(result: Out) => Recursive<Out>);
    next: (<Out>(next: (() => Recursive<Out>)) => Recursive<Out>);
    run: (<Out>(recursive: Recursive<Out>) => Out);
}