On Tue, 20 Apr 2010, wren ng thornton wrote: > -- | The isomorphic Haskell98 version > class Monad m => MonadJoinIO m where > -- | Embed the IO into the monad m > joinIO :: IO (m a) -> m a > > -- | Extract the IO computation to the top level, > -- rendering the m pure from IO. > partIO :: m a -> IO (m a) > > -- | The isomorphisms > joinIO' m = morphIO (m >>=) > morphIO' f = joinIO (f partIO)
To establish an isomorphism, you also need to define partIO from morphIO. For example, I don’t see how I could define partIO :: IO a -> IO (ReaderT r IO a) that extracts effects into the outer IO, because the effects depend on some unknown state of type r. By the way: > This bounced because I have different emails registered for cafe@ and > libraries@, so forwarding it along to the cafe. You can sign up both addresses for the list, then log in to the Mailman web interface ( http://www.haskell.org/mailman/listinfo/haskell-cafe → Unsubscribe or edit options) and disable mail delivery on one of them. Then you get one copy of each message but you can post from either address. Anders _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe