[Haskell-cafe] (state) monad and CPS

jean-christophe mincke jeanchristophe.mincke at gmail.com
Thu Nov 12 03:07:46 EST 2009


Thank everybody for the answers.

I must admit that I did not really emphasize the goal behind my initial
question. Which is better expressed this way:

'walk' is written is CPS and is tail recursive. Unless I am wrong , if the
continuation monad  is used, the recursive calls to 'walk' are no longer in
tail position.

So my initial question was rather: is it possible to use the state monad and
keeping the code tail recursive?

I do not master all the subtilities of lazy evaluation yet and perhaps  tail
recursivity does not have the same importance (or does not offer the same
guarantees) in a lazy language as it does in a strict language.
But I am facing a similar problem with workflows in F# (F#'s monads).

Thank you



On Thu, Nov 12, 2009 at 8:17 AM, wren ng thornton <wren at freegeek.org> wrote:

> Nicolas Pouillard wrote:
>> Excerpts from jean-christophe mincke's message of Tue Nov 10 21:18:34
>> +0100 2009:
>>> do acc <- get
>>>   put (acc+1)
>>>   ...
>> Since this pattern occurs often 'modify' is a combination of get and put:
>> do modify (+1)
>>   ...
> Though the caveat about laziness applies here as well. modify is famously
> lazy which can lead to space leaks and stack overflows. Better would be to
> define and use your own strict version:
>    modify' f = get >>= \x -> put $! f x
> --
> Live well,
> ~wren
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091112/04a01617/attachment.html

More information about the Haskell-Cafe mailing list