2
stTrav :: PrimMonad m => (Int -> m b) -> m [b]
その後、RVar
モナド
ranfu :: RVar Bool
内のランダム値発生器と、(例えば)にトラバーサルのいくつかの種類を行う高次機能ST
モナドを持っている場合はどのように私ができますこのトラバーサルのループでranfu
を使用しますか? RVar
の状態をSTRef
にする必要がありますか、それとも良い方法がありますか?
うーん、あなたが何を考えている「より良い方法」?私が心配している限り、ST自体に本質的にランダムなものは何もありません。 AFAIKには 'RVal'を"解凍 "する3つの方法があり、それらは' runRVar'、 'sampleRVar'と' sampleState'です。あなたの 'ST'が何らかの形で' MonadRandom'インスタンスを提供できれば、第2のインスタンスを使うことができます。 –
私はこれが合法であるとは思わないでしょう。 'ST'はあなたがそれを実行した後に決定的になるはずです。ランダム性はそれに違反します。 –
@LouisWassermanもちろん最初に何かを導入する必要があります。それ以降は完全に確定的です。 – leftaroundabout