{- | module: $Header$ description: Probability license: MIT maintainer: Joe Leslie-Hurd stability: provisional portability: portable -} module OpenTheory.Random where import qualified OpenTheory.Primitive.Natural as Natural import qualified OpenTheory.Primitive.Random as Random vector :: (Random.Random -> a) -> Natural.Natural -> Random.Random -> [a] vector f n r = if n == 0 then [] else let (r1, r2) = Random.split r in f r1 : vector f (n - 1) r2 bits :: Natural.Natural -> Random.Random -> [Bool] bits = vector Random.bit