{-| Module: BattlePlace.Skill.Glicko.Types Description: Types for Glicko ratings. License: MIT -} {-# LANGUAGE DeriveGeneric #-} module BattlePlace.Skill.Glicko.Types ( Skill(..) , ratingFromSkill ) where import qualified Data.Aeson as J import Data.Default import GHC.Generics(Generic) import BattlePlace.Rating import BattlePlace.Util data Skill = Skill { skill_rating :: {-# UNPACK #-} !Double , skill_deviation :: {-# UNPACK #-} !Double , skill_volatility :: {-# UNPACK #-} !Double } deriving Generic -- default skill instance Default (Skill) where def = Skill { skill_rating = 1500 , skill_deviation = 350 , skill_volatility = 0.06 } instance J.FromJSON (Skill) where parseJSON = J.genericParseJSON jsonOptions instance J.ToJSON (Skill) where toJSON = J.genericToJSON jsonOptions toEncoding = J.genericToEncoding jsonOptions -- | Conservative rating for skill. ratingFromSkill :: Skill -> Rating ratingFromSkill Skill { skill_rating = rating , skill_deviation = deviation } = Rating $ rating - deviation * 2