我需要一个有偏见的随机布尔值列表。每个布尔值都需要具有相同的真概率(伯努利分布)。这些布尔值被传递给一个函数,该函数为每个输入布尔值生成零个或多个输出布尔值。我需要一个无限列表,因为我事先不知道需要多少布尔值才能提供足够的输出。请参阅以下(简化)代码:
import System.Random.MWC
import System.Random.MWC.Distributions
foo :: [Bool] -> [Bool] -- foo outputs zero or more Bools per input Bool
main = do
gen <- create
bits <- sequence . repeat $ bernoulli 0.25 gen
print . take 32 . foo $ bits
Run Code Online (Sandbox Code Playgroud)
不幸的是,这段代码只挂在main. 我猜在某处发生了一些非懒惰的事情Control.Monad.ST?
(我可以用 做这样的事情System.Random.randoms,但结果值没有所需的分布。)
我可以在继续使用System.Random.MWC图书馆的同时解决这个问题吗?或者这是否需要我切换到替代实现?