{-# LANGUAGE DeriveGeneric        #-}
{-# LANGUAGE FlexibleContexts     #-}
{-# LANGUAGE RankNTypes           #-}
{-# LANGUAGE TemplateHaskell      #-}
{-# LANGUAGE UndecidableInstances #-}


module Experimenter.Input where

import           Control.DeepSeq
import           Control.Lens

import           Experimenter.Experiment

data Input a = Input
  { Input a -> Int
_inputValuePeriod :: !Int
  , Input a -> InputValue a
_inputValue       :: !(InputValue a)
  }


instance NFData (InputValue a) => NFData (Input a) where
  rnf :: Input a -> ()
rnf (Input Int
p InputValue a
v) = Int -> ()
forall a. NFData a => a -> ()
rnf Int
p () -> () -> ()
`seq` InputValue a -> ()
forall a. NFData a => a -> ()
rnf InputValue a
v


makeLenses ''Input