{-# LANGUAGE BangPatterns    #-}
{-# LANGUAGE DeriveAnyClass  #-}
{-# LANGUAGE DeriveGeneric   #-}
{-# LANGUAGE TemplateHaskell #-}

module Experimenter.Measure where

import           Control.DeepSeq
import           Control.Lens
import           GHC.Generics

import           Experimenter.StepResult

data Measure = Measure
  { Measure -> Int
_measurePeriod  :: !Int
  , Measure -> [StepResult]
_measureResults :: ![StepResult]
  } deriving ((forall x. Measure -> Rep Measure x)
-> (forall x. Rep Measure x -> Measure) -> Generic Measure
forall x. Rep Measure x -> Measure
forall x. Measure -> Rep Measure x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Measure x -> Measure
$cfrom :: forall x. Measure -> Rep Measure x
Generic)
makeLenses ''Measure

instance NFData Measure where
  rnf :: Measure -> ()
rnf (Measure !Int
p ![StepResult]
r) = Int -> ()
forall a. NFData a => a -> ()
rnf Int
p () -> () -> ()
`seq` [StepResult] -> ()
forall (f :: * -> *) a. (NFData1 f, NFData a) => f a -> ()
rnf1 [StepResult]
r