Marcin 'Qrczak' Kowalczyk wrote:
>
> Fri, 16 Feb 2001 10:01:06 -0800, Levent Erkok <[EMAIL PROTECTED]> pisze:
>
> > The non-strict version is not good either, because it won't do
> > the effects!
>
> data Box a = Box {unbox :: a}
>
> fixIO m = let
> x = unsafePerformIO (liftM Box (m (unbox x)))
> in return (unbox $! x)
>
But that doesn't do the effects either..
I tried:
data Box a = Box {unbox :: a}
fixIOMQ :: (a -> IO a) -> IO a
fixIOMQ m = let x = unsafePerformIO (liftM Box (m (unbox x)))
in return (unbox $! x)
and:
do { x <- fixIOMQ (\x -> do {putStr "hello"; return (x+1)}); return
2}
Which did NOT print hello on the screen, before returning 2.
Maybe I'm missing your point?
By the way, the original version that Simon PJ wrote (with mvar's)
didn't have any of
these problems.
-Levent.
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell