@MichaelHomer They're basic examples of monads in Haskell. For lists, it's a "for_each" iteration, and for functions, it's a reference to future return value.
It also matters exactly what the scope of that lifting is in a way that it doesn't for an option type that can just short-circuit out of the function, especially if there's more than one ? and especially with branching. For types with trivial binds that only invoke the continuation once it's more straightforward
plus for multiple invocations you'd suddenly have to do a lot of dealing with move/borrow/mutation semantics, at which point you may as well just use closure syntax anyways