将StateT IO与State相结合

时间:2013-06-26 16:23:48

标签: haskell

如果我有一个函数f :: State Int (),是否可以在另一个函数g :: StateT Int IO ()中使用它?使用f = do { something; g }嵌套它无法使用Couldn't match type 'Data.Functor.Identity.Identity' with 'IO'进行类型检查。

1 个答案:

答案 0 :(得分:20)

是的,此操作通常称为“吊装”。对于州monad,它可以定义为

hoistState :: Monad m => State s a -> StateT s m a
hoistState = state . runState

不幸的是,它没有在Control.Monad.State模块中定义。