[Haskell-cafe] Examples of Continuation monad that impossible to understand and maintain?

Jeff Clites jclites at mac.com
Tue Aug 31 14:46:11 UTC 2021

Based on the preceding paragraph, I think that by “abuse” it means overuse, as in using CPS when you could have used straightforward code. I can imagine someone doing at the source code level the sort of things that would be done by a CPS-based compiler (converting everything possible to CPS), and ending up with a mess.

For example, imagine you started with this code snippet:

  let x = f a
        y = g x
  in h x y

If you fully convert that to CPS you’d end up with 3 continuations (I think) and it would be much harder to understand. And adding an additional let binding later might involve a bunch of restructuring.

I assume it just means that sort of thing. When someone first learns about continuations and their generality, it can be tempting to go overboard.


> On Aug 31, 2021, at 3:03 AM, YueCompl via Haskell-Cafe <haskell-cafe at haskell.org> wrote:
> Dear Cafe,
> I'm wrapping up my CPS codebase to provide some monadic interface, it appears almost the Cont monad, so the following statement is a pretty valid caveat to me now:
> > Abuse of the Continuation monad can produce code that is impossible to understand and maintain.
> Which can be viewed in context of Hackage at: https://hackage.haskell.org/package/mtl/docs/Control-Monad-Cont.html#:~:text=Abuse%20of%20the%20Continuation%20monad%20can%20produce%20code%20that%20is%20impossible%20to%20understand%20and%20maintain 
> But I can't find concrete examples demonstrating the "impossible to understand and maintain" situation, in figuring out what pitfalls I'd rather to avoid.
> Please share what you know about it, many appreciations!
> Background of my CPS necessarity: 
> Library code need to delegate STM transaction boundary delimitation to (scripting) application code, though `inlineSTM :: STM a -> m a` can be used to force some action to be within current tx, the usual `>>=` binding should honor whether a separate `atomically` tx should be issued for its rhs computation, as specified by the scripting context.
> Thanks,
> Compl
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20210831/ac70e2a6/attachment.html>

More information about the Haskell-Cafe mailing list