{-# LANGUAGE GADTs #-} module Math.IRT.Internal.LogLikelihood where import Numeric.AD (Mode, Scalar) import Statistics.Distribution (Distribution) class (Distribution d) => LogLikelihood d where logLikelihood :: (Mode a, Floating a, Scalar a ~ Double) => Bool -> d -> a -> a logLikeFunc :: (Distribution d, Mode a, Floating a, Scalar a ~ Double) => (d -> a -> a) -> Bool -> d -> a -> a logLikeFunc f True = (log .) . f logLikeFunc f False = ((log . (1-)) .) . f