SciBaseTypes-0.0.0.1: Statistics/Odds.hs
-- | Provides newtypes for odds, log-odds, and discretized versions.
module Statistics.Odds where
import Control.DeepSeq (NFData(..))
import Data.Aeson (FromJSON,ToJSON)
import Data.Binary (Binary)
import Data.Hashable (Hashable)
import Data.Serialize (Serialize)
import Data.Vector.Unboxed.Deriving
import GHC.Generics (Generic)
import Numeric.Limits
-- | Odds.
newtype Odds = Odds { getOdds ∷ Double }
deriving (Generic,Eq,Ord,Show,Read,Num)
-- | Encodes log-odds that have been rounded or clamped to integral numbers.
-- One advantage this provides is more efficient "maximum/minimum" calculations
-- compared to using @Double@s.
--
-- Note that these are "explicit" log-odds. Each numeric operation uses the
-- underlying operation on @Int@.
newtype DiscLogOdds = DiscLogOdds { getDiscLogOdds ∷ Int }
deriving (Generic,Eq,Ord,Show,Read,Num)
derivingUnbox "DiscretizedLogOdds"
[t| DiscLogOdds → Int |] [| getDiscLogOdds |] [| DiscLogOdds |]
instance Binary DiscLogOdds
instance Serialize DiscLogOdds
instance FromJSON DiscLogOdds
instance ToJSON DiscLogOdds
instance Hashable DiscLogOdds
instance NFData DiscLogOdds where
rnf (DiscLogOdds k) = rnf k
{-# Inline rnf #-}
instance NumericLimits DiscLogOdds where
minFinite = DiscLogOdds minFinite
{-# Inline minFinite #-}
maxFinite = DiscLogOdds maxFinite
{-# Inline maxFinite #-}