有什么办法可以消除单子(monad)上的“东西”吗?

我正在开发游戏,现在尝试了解数据库。我发现 happstack 很好,但我听不懂。

例如,我有此功能(希望您熟悉happstack)

getAllThings :: MonadIO m => m [Thing]
getAllThings = do
            elems <- query GetThings
            return elems

所以我得到m [Things],但是我不能在我的模型中使用它!例如
doSomeThingWithThings :: [Thing] -> Something

我用谷歌搜索,但没有发现任何东西。

最佳答案

您不应该以这种方式退出IO monad(unsafePerformIO函数除外),但是您仍然可以在其中使用函数:

process :: MonadIO m => m ()
process = do
          elems <- getAllThings
          let smth = doSomeThingWithThings elems
          -- ...

关于haskell - 如何从Haskell的monad中获取值(value)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7314789/

10-10 22:52