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

Isaac Elliott isaace71295 at gmail.com
Wed Sep 1 08:54:17 UTC 2021


If you hide the usages of callCC behind a sound API then it shouldn't be
much of an issue, if that's what you're saying.

On Wed, 1 Sep 2021, 6:32 pm YueCompl, <compl.yue at icloud.com> wrote:

> Am I understanding it right that all ways upward since the monad layer
> (assuming all laws are strictly followed) of "Continuation monad", the
> programmer is restricted to "structured programming" practices, unless
> he/she resort to the continuation mechanism beneath the monad layer, only
> in where `goto` is available?
>
> I think I can relax if that's the case, CPS is inevitable in this case of
> mine, and I can at least hide its unsafety beneath the Continuation monad
> from junior developers in my team.
>
> On 2021-09-01, at 15:55, Isaac Elliott <isaace71295 at gmail.com> wrote:
>
> I don't have any examples. Given that Cont essentially implements
> unstructured control flow, I think that examples of `goto` misuse would
> apply by analogy.
>
> On Wed, 1 Sep 2021, 4:31 pm YueCompl via Haskell-Cafe, <
> haskell-cafe at haskell.org> wrote:
>
>> I can understand the purpose if it is advising against overusing surface
>> syntax in CPS, but here the approach is to hide continuation beneath the
>> beloved do notation on the surface, and monad laws plus possibly further
>> laws to be added, will make it safer to program programs by end
>> programmers.
>>
>> I do realize CPS is powerful yet dangerous (unsafe), abuse of CPS could
>> be easy and quite unintentional, but what about abuse of "Continuation
>> monad"?
>>
>> On 2021-08-31, at 22:46, Jeff Clites via Haskell-Cafe <
>> haskell-cafe at haskell.org> wrote:
>>
>> 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.
>>
>> Jeff
>>
>> 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.
>>
>> _______________________________________________
>> 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.
>>
>>
>> _______________________________________________
>> 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/20210901/43b8c397/attachment.html>


More information about the Haskell-Cafe mailing list