{-# LANGUAGE FlexibleContexts, TypeFamilies #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  CSPM.FiringRules.HelperClasses
-- Copyright   :  (c) Fontaine 2010
-- License     :  BSD
-- 
-- Maintainer  :  fontaine@cs.uni-duesseldorf.de
-- Stability   :  experimental
-- Portability :  GHC-only
--
-- Some helper classes.
-- (Might be deleted or moved somewhere else some time.)
--
-----------------------------------------------------------------------------

module CSPM.FiringRules.HelperClasses
where

import CSPM.CoreLanguage
import CSPM.FiringRules.Rules

-- | Implementation i supports 'Eq' and 'Ord'.
class
  (Eq (Process i), Eq (RuleTick i), Eq (RuleTau i), Eq (RuleEvent i)
  ,Ord (Process i), Ord (RuleTick i), Ord (RuleTau i) ,Ord (RuleEvent i))
  => EqOrd i

-- | Implementation i supports 'Show'.
class
  (Show (TTE i), Show (Rule i), Show (Process i), Show (RuleTick i)
  , Show (RuleTau i), Show (RuleEvent i))
  => FShow i

-- | 'CSP1' means that implementation i supports the base language.
class (EqOrd i,BL i) => CSP1 i

-- | 'CSP2' means that implementation i supports the base language and multi-field events.
class (EqOrd i,BF i,CSP1 i) => CSP2 i