ReaderT r (Rand StdGen) a
現在、並行して実行したい計算を行っています。私はMonadParallelに出くわしましたが、それは私が望むことを実行するようです。
のMonadParallelのインスタンスはすでに存在しますが、monad -randomからReaderT
独自のインスタンスを作成する必要がありました。しかし、私はそれを正しく行ったかどうかはわかりません。Haskellでの並列プログラミングについてはあまり詳しくありませんが、並列で計算を実行すると、通常の実行時と同じ値が得られると期待されています。私のbindM2forRandのインスタンスは使用しているため(したがって、同じ初期ジェネレーターから異なる乱数のセットを取得します)、これは私のインスタンスには当てはまりません。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
これを無視することもあると思いますが(数字はまだランダムですよね?)、何かが足りないと感じずにはいられません。これは大丈夫ですか、それともより良い解決策がありますか?