首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StateT和forM_

StateT和forM_
EN

Stack Overflow用户
提问于 2013-01-07 08:23:06
回答 1查看 250关注 0票数 0

我怎样才能让put在forM_内部的StateT monad上工作

代码语言:javascript
复制
loop :: Integer -> StateT World IO ()
loop passes = do
    (scene, b1) <- get
    forM_ [1..passes] $ \pass -> do
        let b2 = foo b1 pass
        -- other stuff --
        put (scene, b2) -- this no longer puts into the StateT monad 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-07 09:23:02

我认为它工作得很好,例如:

代码语言:javascript
复制
--I don't know what World is so I can't use your example

loop :: StateT Integer IO ()
loop = do
    forM_ [1..10] put
    x <- get
    liftIO $ print x

正如我所期望的那样,运行evalStateT loop 0会打印10。幕后的mapM_是这样做的:

  1. 实际上执行了映射,在上面的示例中,它返回一个右文件夹列表,如下所示:foldr (>>) (return ()) listOfMappedValues

还不清楚您到底想要什么,但这将允许您将mapM_中的内容放入状态

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14188278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档