我正在使用Control.Monad.Rand
,我有一个结构
data MCSystem = MCSystem { params :: Params
, path :: Path }
还有我不知道如何实现的功能——
runSystem :: (RandomGen g) => MCSystem -> Rand g MCSystem
runSystem system = MCSystem mcparams newPath -- this line doesn't make any
-- sense and i know it
where
mcparams = params system
newPath = runPath $ path system
runPath :: (RandomGen g) => Path -> Rand g Path
-- basically performs a random mutation on the path
runPath
返回一个Rand g Path
单子......我如何拉它来制作一个新的Rand g MCSystem
单子,以便runSystem
可以正确返回它,并且可以稍后用生成器调用它?
我想也许我可以将所有内容重构为 Reader monad,但我觉得如果可能的话我想避免它。