-- | Defining all the classes which represent knowledge-about-theories.
module Theory.Drasil.Classes (
  -- the classes
    HasInputs(..)
  , HasOutput(..)
  ) where

import Language.Drasil

import Control.Lens (Lens', Getter)

-- | Members of this class may have inputs.
class HasInputs c where
  -- | Provides a 'Lens' that holds a 'QuantityDict' and maybe constraints.
  inputs :: Lens' c [(QuantityDict, Maybe (RealInterval Expr Expr))]

-- | Members of this class may have outputs.
class HasOutput c where
  -- | Provides a 'Getter' that holds a 'QuantityDict' for output.
  output :: Getter c QuantityDict
  -- | Provides a 'Getter' that holds constraints on the output.
  out_constraints :: Getter c [RealInterval Expr Expr]