如果我有一个功能f :: State Int (),是否可以在另一个功能中使用它g :: StateT Int IO ()?嵌套它f = do { something; g }无法进行类型检查Couldn't match type 'Data.Functor.Identity.Identity' with 'IO'.
Rom*_*aka 20
是的,此操作通常称为"吊装".对于州monad,它可以定义为
hoistState :: Monad m => State s a -> StateT s m a
hoistState = state . runState
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有在Control.Monad.State模块中定义.