我目前正在处理ReaderT r (Rand StdGen) a
我想并行运行的计算。我遇到了Monad Parallel,它似乎会做我想做的事。
已经有一个 MonadParallel for 的实例,但我必须从monad-randomReaderT
创建自己的 for 。但是,我不确定我做对了。我对 Haskell 中的并行编程不太熟悉,但我相信在并行中运行计算应该给出与正常运行时相同的值。因为我为 Rand 使用的 bindM2 实例(因此从同一个初始生成器获得了一组不同的随机数),所以我的实例并非如此。Rand
split
instance P.MonadParallel (Rand StdGen) where
bindM2 f ma mb = do
split1 <- getSplit
split2 <- getSplit
let a = evalRand ma split1
let b = evalRand mb split2
a `par` b `pseq` f a b
虽然我觉得有理由忽略这一点(数字仍然是随机的,对吗?)我也忍不住觉得我错过了一些东西。这没问题还是有更好的解决方案?