这个问题与其他地方已经涵盖的问题很接近,但我还没有找到任何具体解决它的内容(至少不是以我能够理解的方式)。
我想以取决于各种随机选择的方式更新状态。由于我正在使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)