fix initial success and failure continuations
sealed
use free monad
use FSharpFunc.Adapt
currying