Hello,

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

Regards

J-C


On Thu, Nov 12, 2009 at 8:17 AM, wren ng thornton <[email protected]> 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
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to