[Haskell-cafe] Re: ANNOUNCE: GotoT-transformers version 1.0

Antoine Latter aslatter at gmail.com
Thu Sep 9 01:21:50 EDT 2010


On Wed, Sep 8, 2010 at 11:54 PM, Ertugrul Soeylemez <es at ertes.de> wrote:
> Gregory Crosswhite <gcross at phys.washington.edu> wrote:
>
>>  On 09/08/10 19:14, Ertugrul Soeylemez wrote:
>> > Have you looked at ContT from monadLib?  It's not just a goto, but
>> > in fact a setjmp/longjmp, i.e. a goto with value.  I haven't used it
>> > for anything yet, but it might come in handy for some algorithms:
>> >
>> > [...]
>>
>> Whoa, that's cool!  I glanced at monadLib but I didn't realize that it
>> let you create labels that you could return to like that.  :-) (I know
>> of callCC, but that isn't quite the same as this.)  Thanks for the
>> pointer!
>
> It is, in fact, callCC. ;)
>
>
>> The limitation with continuation-based approaches to goto, though, is
>> that you can only jump back to points that you've seen before.  The
>> reason why I don't use a continuation-based approach in GotoT is
>> because I wanted the user (i.e., me, and maybe one or two other people
>> if I'm lucky :-) ) to be able to jump to an arbitrary point outside
>> the calculation that has never been visited before, rather than
>> returning a previously visited point of the same calculation.
>>
>> Of course, if someone can prove to me that I am wrong and that GotoT
>> semantics can be implemented with continuations, then I would welcome
>> this information.  :-)
>
> I don't think you need 'goto' to implement jumps in Haskell.  Note that
> functions as well as computations are first class:
>

To recover from my overly complex previous post, here is a much simply
goto based on existing monad transformers:

> goto :: Monad m => ContT r m r -> ContT r m a
> goto (ContT m) = ContT $ \_ ->
>                m return

Reading your post, Ertugrul, made something click for me

Antoine


More information about the Haskell-Cafe mailing list