module Stochastic.Binomial(Binomial, mkBinomial) where

import Stochastic.Distribution
import Stochastic.Bernoulli
import Helpers

data Binomial = Binomial Int Bernoulli

mkBinomial :: Bernoulli -> Int -> Binomial
mkBinomial base n = Binomial n base

instance DiscreteDistribution Binomial where
  randIntIn (a, b) (Binomial n g0) =
    mapTuple
    (\xs -> (a - 1) + (sum xs))
    (Binomial n)
    (randInts (b - a + 1) g0)
  randInt (Binomial n g0) = randIntIn (0, n) (Binomial n g0)

toDbl = fromInteger . toInteger