如果我有一個功能f :: State Int()
,是否可以在另一個功能g :: StateT Int IO()
內使用它?將其與f = do { something; g }
嵌套不能與Couldn't match type 'Data.Functor.Identity.Identity' with 'IO'
覈對。組合StateT IO與狀態
回答
是的,這個操作通常被稱爲「提升」。只需定義並使用以下功能:
hoistState :: Monad m => State s a -> StateT s m a
hoistState = StateT . (return .) . runState
不幸的是,它沒有在Control.Monad.State
模塊中定義。
太棒了,謝謝! – Fraser
參見[mmorph'包教程](http://hackage.haskell.org/packages/archive/mmorph/1.0.0/doc/html/Control-Monad-Morph.html#g:4) –
@GabrielGonzalez似乎有一個具有'hoistId ::(Monad m)=> t的monad變換器的類型類,對於基本庫來說,標識符a - > tma'是一個有用的(Haskell98)。它只是函子'return的'MFunctor'的專用版本。 runIdentity'。 –
- 1. 在StateT中組合多個狀態
- 2. MonadBaseControl IO ... StateT Implementation
- 3. 結合狀態IO動作
- 4. 結合StateT與InputT
- 5. 遞歸與IO和狀態單元
- 6. 結合StateT和國家單子
- 7. 狀態單聲道混合IO和非IO
- 8. 百萬秒差距,回溯用戶狀態與StateT和ParsecT
- 9. 組合狀態,FSM
- 10. 組件中的混合狀態與redux
- 11. Snap,IO和酸性狀態
- 12. StatEt與R 2.15
- 13. 如何在StateT上使用megaparsec的組合器
- 14. 與StateT monad環路
- 15. StateT和WX GUI共存
- 16. 範圍管理 - 狀態IO Monad?
- 17. Flex 4.5:狀態與組件
- 18. StateT and forM_
- 19. 如何使用狀態與管道?
- 20. 使StatET與R工作2.15.0
- 21. 使用StateT與ReaderT處理異常IORef
- 22. Monad變壓器:IO和狀態
- 23. 將天氣狀態與用戶活動狀態結合
- 24. StatET和Rmarkdowns
- 25. 如何檢索組合框狀態
- 26. 迭代組合狀態列表模式
- 27. 傳入+傳出+狀態的組合?
- 28. 帶狀態縮寫的組合框
- 29. 組合框單擊時丟失狀態
- 30. 將React videojs組件的狀態與Redux相結合
不應該有'g = do {something; f}'?你想在g中使用f,對嗎? – gumik