{- | Copyright : 2007 Eric Kidd License : BSD3 Stability : experimental Portability : non-portable (newtype deriving) Support for probability values. -} module Data.Probability.Base ( Probability, prob, fromProb, pnot, padd, pmul ) where import Data.Monoid -- | The probability of an event occuring. We provide this as a type -- class, allowing users of this library to choose among various -- representations of probability. class (Eq p, Monoid p) => Probability p where -- TODO: Should 'prob' and 'fromProb' work with Rational or another type? -- They exist mostly to interface with -- 'Control.Monad.Distribution.weighted'. -- | Create a probability from a rational number between 0 and 1, inclusive. prob :: Rational -> p -- | Convert a probability to a rational number. fromProb :: p -> Rational -- | Given the probability of an event occuring, calculate the -- probability of the event /not/ occuring. pnot :: p -> p -- | Given the probabilities of two disjoint events, calculate the -- probability of either event occuring. padd :: p -> p -> p -- | Given the probabilities of two indepedent events, calculate the -- probability of both events occuring. pmul :: p -> p -> p