如何从Haskell中的单子中提取值?

如何从Haskell中的单子中提取值?,haskell,monads,Haskell,Monads,有什么办法可以把单子的“东西”去掉吗 我正在开发一个游戏,我现在正试图了解数据库。我觉得很好,但我买不到 例如,我有这个函数(希望您熟悉happstack) 我在谷歌上搜索了一下,什么也没找到。您不应该以这种方式退出IO monad(除了unsafePerformIO函数),但您仍然可以在其中使用您的函数: process :: MonadIO m => m () process = do elems <- getAllThings let s

有什么办法可以把单子的“东西”去掉吗

我正在开发一个游戏,我现在正试图了解数据库。我觉得很好,但我买不到

例如,我有这个函数(希望您熟悉happstack)


我在谷歌上搜索了一下,什么也没找到。

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

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

elems在
elems之后,你可以这样想:你的整个程序是IO monad,你的模型是一堆在里面执行的纯函数。是的!!在用你的答案重新思考我的问题之后,我明白必须是这样!,我的游戏(正如你所说)是纯功能的,但用户界面是真实丑陋的世界,所以持久性部分也必须如此!你可能会喜欢(回答一个类似的StackOverflow问题)有一种从monad-use中去掉“things”的方法。
doSomeThingWithThings :: [Thing] -> Something
process :: MonadIO m => m ()
process = do
          elems <- getAllThings
          let smth = doSomeThingWithThings elems
          -- ...