{-# 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 { forall a. Input a -> Int _inputValuePeriod :: !Int , forall a. 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) = forall a. NFData a => a -> () rnf Int p seq :: forall a b. a -> b -> b `seq` forall a. NFData a => a -> () rnf InputValue a v makeLenses ''Input