Hi
Suppose I have a transformer stack such as StateT s IO a
and I need to use this with any transformer stack which wraps this one, so things such as ExceptT e (StateT s IO a)
, WriterT w (StateT s IO a)
, or ExceptT e (WriterT w (StateT s IO a)
. In this case lift
wouldn’t do, as sometimes I would need lift
and others lift.lift
, etc. Would the following function be the right way to do this ?
transformersToMtlState :: (Monad m, MonadState s t, MonadBase m t) => StateT s m a -> t a
transformersToMtlState m = do
currentState <- get
(a, newState) <- liftBase $ runStateT m currentState
put newState
return a
Thanks,
Miguel Negrão