Provides monadic interface for computation with discrete random variables. Based on: http://web.engr.oregonstate.edu/~erwig/papers/PFP_JFP06.pdf
type Prob = P.Probprob :: Number -> Maybe P.ProbrunProb :: P.Prob -> Numbertype ProbList = P.ProbListprobList :: [P.Prob] -> Maybe P.ProbListrunProbList :: P.ProbList -> [P.Prob]type Dist = P.Distdist :: forall a. [Tuple a P.Prob] -> Maybe (P.Dist a)zipDist :: forall a. [a] -> P.ProbList -> P.Dist afromFreqs :: forall a. [Tuple a Number] -> Maybe (P.Dist a)choose :: forall a. P.Prob -> a -> a -> P.Dist arunDist :: forall a. P.Dist a -> [Tuple a Number]distProbs :: forall a. P.Dist a -> P.ProbListextract :: forall a. P.Dist a -> [a]type Spread a = [a] -> Maybe (P.Dist a)uniform :: forall a. Spread arelative :: forall a. [Number] -> Spread areshape :: forall a. Spread a -> P.Dist a -> Maybe (P.Dist a)norm :: forall a. (Ord a) => P.Dist a -> P.Dist atype Event a = a -> BooleanoneOf :: forall a. (Eq a) => [a] -> Event ajust :: forall a. (Eq a) => a -> Event a(??) :: forall a. Event a -> P.Dist a -> P.Prob(?=<<) :: forall a. Event a -> P.Dist a -> Maybe (P.Dist a)(>>=?) :: forall a. P.Dist a -> Event a -> Maybe (P.Dist a)filter :: forall a. Event a -> P.Dist a -> Maybe (P.Dist a)cond :: forall a. P.Dist Boolean -> P.Dist a -> P.Dist a -> P.Dist ajoinDists :: forall a b c. (a -> b -> c) -> P.Dist a -> (a -> P.Dist b) -> P.Dist cmarginalize :: forall a b. (Eq b) => (a -> b) -> P.Dist a -> P.Dist bdata Iso a b
= Iso (a -> b) (b -> a)to :: forall a b. Iso a b -> a -> bfrom :: forall a b. Iso a b -> b -> aexpected :: forall a. Iso a Number -> P.Dist a -> avariance :: forall a. Iso a Number -> P.Dist a -> astdDev :: forall a. Iso a Number -> P.Dist a -> aapprox :: forall a. (Ord a) => P.Dist a -> P.Dist a -> Booleansize :: forall a. P.Dist a -> Numbermap :: forall a b. (Ord b) => (a -> b) -> P.Dist a -> P.Dist bmapMaybe :: forall a b. (a -> Maybe b) -> P.Dist a -> Maybe (P.Dist b)Data declarations which are hidden behind smart constructors in Probability.
newtype Prob
= Prob Numbernewtype ProbList
= ProbList [Prob]newtype Dist a
= Dist [Tuple a Number]epsilon :: Number(~~) :: Number -> Number -> Boolean(/~) :: Number -> Number -> Boolean(<~) :: Number -> Number -> Boolean(>~) :: Number -> Number -> Booleanlift :: forall a. ([Tuple a Number] -> [Tuple a Number]) -> Dist a -> Dist asumP :: forall a. [Tuple a Number] -> NumbersortP :: forall a. [Tuple a Number] -> [Tuple a Number]sortElem :: forall a. (Ord a) => [Tuple a Number] -> [Tuple a Number]norm' :: forall a. (Ord a) => [Tuple a Number] -> [Tuple a Number]isValid :: forall a. [Tuple a Number] -> Booleaninstance functorDist :: Functor Distinstance applyDist :: Apply Distinstance applicativeDist :: Applicative Distinstance bindDist :: Bind Distinstance monadDist :: Monad Distinstance eqProb :: Eq Probinstance ordProb :: Ord Probinstance showProb :: Show Probinstance eqDist :: (Eq a) => Eq (Dist a)instance ordDist :: (Ord a) => Ord (Dist a)instance showDist :: (Show a) => Show (Dist a)instance eqProbList :: Eq ProbListinstance ordProbList :: Ord ProbListinstance showProbList :: Show ProbList