
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
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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe