[Haskell-cafe] Re: A question about mfix
Janis Voigtlaender
voigt at tcs.inf.tu-dresden.de
Wed Jul 30 02:37:44 EDT 2008
Janis Voigtlaender wrote:
> Wei Hu wrote:
>
>> Thanks for pointing out the sharing part. My original question is
>> still unanswered: for lazy monads, can we give such a general mfix
>> definition?
>
> ...
> (Constructing an explicit counterexample is left as an exercise ;-)
Oh, I couldn't resist to do my own exercise ...
> import Control.Monad.Fix
> import Control.Monad.State.Lazy
>
> data Nat = S Nat | Z deriving Show
>
> tick :: State Nat ()
> tick = get >>= put . S
>
> test1 = runState (mfix (const tick)) Z
>
> test2 = runState (mfix (const tick)) Z
> where mfix f = (mfix f) >>= f
Now:
*Main> test1
((),S Z)
*Main> test2
((),S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S (S ........
I think that proves the point.
Ciao, Janis.
--
Dr. Janis Voigtlaender
http://wwwtcs.inf.tu-dresden.de/~voigt/
mailto:voigt at tcs.inf.tu-dresden.de
More information about the Haskell-Cafe
mailing list