12

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

4

1 回答 1

23

是的,这个操作通常被称为“吊装”。对于 State monad,它可以定义为

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

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

于 2013-06-26T16:39:16.500 回答