module Statistics.Test.Types (
Test(..)
, isSignificant
, TestResult(..)
, significant
, PositionTest(..)
) where
import Control.DeepSeq (NFData(..))
import Data.Aeson (FromJSON, ToJSON)
import Data.Binary (Binary)
import Data.Data (Typeable, Data)
import GHC.Generics
import Statistics.Types (PValue)
data TestResult = Significant
| NotSignificant
deriving (Eq,Ord,Show,Typeable,Data,Generic)
instance Binary TestResult
instance FromJSON TestResult
instance ToJSON TestResult
instance NFData TestResult
data Test distr = Test
{ testSignificance :: !(PValue Double)
, testStatistics :: !Double
, testDistribution :: distr
}
deriving (Eq,Ord,Show,Typeable,Data,Generic,Functor)
instance (Binary d) => Binary (Test d)
instance (FromJSON d) => FromJSON (Test d)
instance (ToJSON d) => ToJSON (Test d)
instance (NFData d) => NFData (Test d) where
rnf (Test _ _ a) = rnf a
isSignificant :: PValue Double -> Test d -> TestResult
isSignificant p t
= significant $ p >= testSignificance t
data PositionTest
= SamplesDiffer
| AGreater
| BGreater
deriving (Eq,Ord,Show,Typeable,Data,Generic)
instance Binary PositionTest
instance FromJSON PositionTest
instance ToJSON PositionTest
instance NFData PositionTest
significant :: Bool -> TestResult
significant True = Significant
significant False = NotSignificant