{-# 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