[Haskell-cafe] MonadPeelIO instance for monad transformers on top of "forall"

Anders Kaseorg andersk at MIT.EDU
Fri Feb 4 22:41:39 CET 2011


On Fri, 4 Feb 2011, Max Bolingbroke wrote:
> data M a = M { unM :: forall m. MonadPeelIO m => Reader.ReaderT () m a }

Maybe this won’t help in your actual code, but isn’t M isomorphic to IO 
(via unM :: M a -> IO a, M . liftIO :: IO a -> M a)?

instance MonadPeelIO M where
  peelIO = M (liftIO (liftM (\k (M mx) -> liftM (\my -> (M (liftIO my))) (k mx)) peelIO))

Anders



More information about the Haskell-Cafe mailing list