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