module Dice where
import Probability (Dist, Probability, prod, uniform, (??))
import Monad (liftM2)
type Die = Int
die :: Dist Die
die = uniform [1..6]
twoDice :: Dist (Die,Die)
twoDice = prod die die
dice :: Int -> Dist [Die]
dice n = sequence $ replicate n die
twoSixes :: Probability
twoSixes = (==(6,6)) ?? liftM2 (,) die die
sixes :: (Int -> Bool) -> Int -> Probability
sixes p n = (p . length . filter (==6)) ?? dice n
droll :: Dist Die
droll =
liftM2 (+) (uniform [0,1]) die
g3 :: Probability
g3 = (>3) ?? die
addTwo :: Dist Die
addTwo =
liftM2 (+) die die