module Stochastic.Bernoulli(Bernoulli, mkBernoulli) where import Stochastic.Distribution import Stochastic.Uniform import Helpers data Bernoulli = Bernoulli Double Uniform mkBernoulli :: Uniform -> Double -> Bernoulli mkBernoulli base p = Bernoulli p base instance DiscreteDistribution Bernoulli where randIntIn (a, b) (Bernoulli p g0) = mapTuple (\x -> a + ((floor $ x + (1-p)) * (b-a)) ) (Bernoulli p) (randDouble g0) randInt g0 = randIntIn (0, 1) g0 toDbl = fromInteger . toInteger