gpt4 book ai didi

haskell - Monad 变压器 : IO and state

转载 作者:行者123 更新时间:2023-12-03 07:08:31 27 4
gpt4 key购买 nike

这个问题与其他地方已经涵盖的问题很接近,但我还没有找到任何专门解决这个问题的内容(至少不是以我能够理解的方式)。

我想以取决于各种随机选择的方式更新状态。由于我正在使用 RandomSource 类型类的实例,所有这些随机选择都存在于 IO monad 中,如下所示:

main :: IO Int
main = do
a <- pickRand [1..7]
return a

where pickRand lst = runRVar (choice lst) DevRandom

我想做的事情如下:存储一个 [Int] 类型的状态,如果随机选择的列表元素 a 大于 3 ,则将其插入该状态。有小费吗?

最佳答案

import Control.Monad
import Control.Monad.Trans.State
import Control.Monad.IO.Class
import Data.Random.RVar
import Data.Random.Source.DevRandom
import Data.Random.List

myFun :: StateT [Int] IO ()
myFun = do
lst <- get
r <- liftIO $ runRVar (randomElement lst) DevRandom
put $ if r > 3 then (r:lst) else lst
return ()


main :: IO ()
main = evalStateT myFun [1..10] >>= print

关于haskell - Monad 变压器 : IO and state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com