moduleNumeric.Probability.ExpectationwhereimportqualifiedNumeric.Probability.Distribution asDistimportqualifiedNumeric.Probability.Percentage asProbability-- TO DO: generalize Float to arbitrary Num type--classToFloat a wheretoFloat ::a ->FloatinstanceToFloat FloatwheretoFloat =idinstanceToFloat IntwheretoFloat =fromIntegralinstanceToFloat IntegerwheretoFloat =fromIntegralinstanceToFloat Probability.T wheretoFloat (Probability.Cons x )=x classFromFloat a wherefromFloat ::Float->a instanceFromFloat FloatwherefromFloat =idinstanceFromFloat IntwherefromFloat =roundinstanceFromFloat IntegerwherefromFloat =round-- expected :: ToFloat a => Prob.Dist a -> Float-- expected = sum . map (\(x,p)->toFloat x*p) . Dist.deconsclassExpected a whereexpected ::a ->Float-- instance ToFloat a => Expected a where-- expected = toFloatinstanceExpected Floatwhereexpected =idinstanceExpected Intwhereexpected =toFloat instanceExpected Integerwhereexpected =toFloat instanceExpected a =>Expected [a ]whereexpected =Dist.expected .Dist.uniform .mapexpected -- expected xs = sum (map expected xs) / toFloat (length xs)floatDist::(ToFloat prob ,Expected a )=>Dist.T prob a ->Dist.T FloatFloatfloatDist =Dist.Cons .map(\(x ,p )->(expected x ,toFloat p )).Dist.deconsinstance(ToFloat prob ,Expected a )=>Expected (Dist.T prob a )whereexpected =Dist.expected .floatDist -- expected = Dist.expected . fmap expected-- | statistical analysesvariance::Expected a =>Probability.Dist a ->Floatvariance =Dist.variance .floatDist stdDev::Expected a =>Probability.Dist a ->FloatstdDev =sqrt.variance 

AltStyle によって変換されたページ (->オリジナル) /