&gt; If doing that results in a stack overflow then that severely limits the utility of this approach.<p>There is no stack overflow. A chaining of monads translate to a blocking of the continuation. The familiar imperative sequence of blocking operations is an instance of the continuation approach, and it isn&#x27;t susceptible to stack overflows.<p>&gt; I find threads really hard to reason about, so &quot;it&#x27;s as easy as threads&quot; doesn&#x27;t really appeal.<p>Let me make it clearer: it&#x27;s not &quot;threads&quot;, as in multiple threads, but &quot;as easy as threads&quot; as in the simple, familiar blocking thread. There is no concurrency involved. If you can understand:<p><pre><code>   a = read()
   print(&quot;hello &quot; + a)
</code></pre>
you understand how to work with delimited continuations (that code is actually written as a continuation, which blocks on read()); there&#x27;s nothing more to it. It is simply a formalization of what it means to block a thread, and a mathematical name for what we&#x27;ve always done.<p>When you block a kernel thread, the OS takes care of all the continuation stuff -- but it does exactly that (the OS does run your single-threaded program in a continuation). Just as the OS mechanics of continuations don&#x27;t get in the way of your understanding of the above code, language-level implementation of continuations shouldn&#x27;t either. It is completely transparent to you -- your thread blocks, some handler does something, and then your thread resumes.<p>&gt; I&#x27;ve not seen the term &quot;functional-imperative&quot; used that way, and usually the two are contrasted - can you clarify what class of languages you&#x27;re talking about?<p>Well, it&#x27;s sort of my made-up term that I use because &quot;functional&quot; doesn&#x27;t really have a definition (try to come up with a definition that encompasses all of: Lisp, ML, Haskell, and Erlang but none of Java, Ruby, Smalltalk, JS and you&#x27;ll see why), so I use the term to denote languages which we call functional (whatever exactly that means) which aren&#x27;t pure, so: the Lisps, MLs, Erlang.