learning-hmm-0.3.1.1: src/Data/Random/Distribution/Extra.hs
{-# LANGUAGE
MultiParamTypeClasses,
FlexibleContexts, FlexibleInstances,
UndecidableInstances
#-}
module Data.Random.Distribution.Extra
( PMF
, pmf
) where
import Data.Maybe ( fromMaybe )
import Data.Tuple ( swap )
import Data.Random.Distribution ( Distribution )
import qualified Data.Random.Distribution.Categorical as C ( Categorical, toList )
class Distribution d t => PMF d t where
-- | Probability mass function for discrete distributions
pmf :: d t -> t -> Double
instance (Real p, Eq a, Distribution (C.Categorical p) a) => PMF (C.Categorical p) a where
pmf d a = realToFrac $ fromMaybe 0 $ lookup a dict
where dict = map swap $ C.toList d