{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}

module HLearn.Models.Distributions.Common
    ( Distribution(..)
    , module Data.Number.LogFloat
    )
    where

import Control.Monad.Random
import Data.Number.LogFloat hiding (log)
import HLearn.Algebra

-------------------------------------------------------------------------------
-- Distribution
    
-- | We use the same class for both discrete and continuous distributions.  Unfortunately, we cannot use the type classes from the 'statistics' package because we require more generalilty.
class Distribution dist sample prob | dist -> sample where
    pdf :: dist -> sample -> prob 
    cdf :: dist -> sample -> prob 
    cdfInverse :: dist -> prob -> sample

--     mean :: dist -> sample
--     drawSample :: (RandomGen g) => dist -> Rand g sample