On Sun, Aug 23, 2009 at 5:21 PM, Jeremy Shaw<jer...@n-heptane.com> wrote: > Also, you could define a forkM function like this: > > forkM :: M () -> M ThreadId > forkM (M r) = M $ mapReaderT forkIO r > > which could be used like this: > > test = runM "foo" $ do > forkM $ loop callback > liftIO $ print "here" > > If we were to expand forkM in test, we would get something like: > > test' = runM "foo" $ do > env <- ask > liftIO $ forkIO (runM env $ loop callback) > liftIO $ print "here" > > So, this does not change the 'rule' of forkIO having to come before a > runM. It just wraps it up nicely.
Somehow I missed this e-mail when I replied last time. Now this is actually the solution to my problem. I didn't think of a second runM with the same environment. Brilliant (OTOH it probably highlights the fact that I am only a Monad novice). Many thanks Jeremy. You saved my day! Cheers, Levi _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe