{-# 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)
  ,Eq (EventSet i), Eq (ExtProcess i), Eq (Prefix i), Eq (Event i), Eq (RenamingRelation i)
  ,Ord (Process i), Ord (RuleTick i), Ord (RuleTau i) ,Ord (RuleEvent i)
  ,Ord (EventSet i), Ord (ExtProcess i), Ord (Prefix i), Ord (Event i), Ord (RenamingRelation 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