
Adam Smyczek wrote:
For a small webapi binding I try to implement a session like monad by building a stack including BrowserAction from Network.Browser module as following:
newtype RBAction a = RBAction { exec :: ErrorT String (StateT RBState BrowserAction) a } deriving (Functor, Monad, MonadState RBState)
I would like the RBAction to implement MonadIO as well, but fight with the liftIO function for hours now, without success. Any idea how the implementation of liftIO could look like?
I would add instance MonadIO BrowserAction where liftIO = ioAction to hook Network.Browser into the monad transformer framework. I don't know why this instance is missing from Network.Browser. Maybe to avoid a dependency on the mtl? Anyway, with this instance, MonadIO can simply be derived for RBAction: newtype RBAction a = ... deriving (MonadIO, ...) Tillmann