content: {- |
  Module      :  ./CASL/CompositionTable/CompositionTable.hs
  Description :  composition tables of qualitative calculi
  Copyright   :  (c) Uni Bremen 2005
  License     :  GPLv2 or higher, see LICENSE.txt
  
  Maintainer  :  till@informatik.uni-bremen.de
  Stability   :  provisional
  Portability :  portable
  
  composition tables
  -}
  
  module CASL.CompositionTable.CompositionTable where
  
  data Table = Table Table_Attrs Compositiontable Conversetable
               Reflectiontable Models
               deriving (Eq, Show)
  
  data Table_Attrs = Table_Attrs
      { tableName :: String
      , tableIdentity :: Baserel
      , baseRelations :: [Baserel]
      } deriving (Eq, Show)
  
  newtype Compositiontable = Compositiontable [Cmptabentry]
      deriving (Eq, Show)
  
  data Conversetable = Conversetable [Contabentry] |
          Conversetable_Ternary
          { inverse, shortcut, homing :: [Contabentry_Ternary] }
      deriving (Eq, Show)
  
  data Reflectiontable = Reflectiontable [Reftabentry]
       deriving (Eq, Show)
  
  newtype Models = Models [Model]
      deriving (Eq, Show)
  
  data Cmptabentry = Cmptabentry Cmptabentry_Attrs [Baserel]
                     deriving (Eq, Show)
  
  data Cmptabentry_Attrs = Cmptabentry_Attrs
      { cmptabentryArgBaserel1 :: Baserel
      , cmptabentryArgBaserel2 :: Baserel
      } deriving (Eq, Show)
  
  data Contabentry = Contabentry
      { contabentryArgBaseRel :: Baserel
      , contabentryConverseBaseRel :: [Baserel]
      } deriving (Eq, Show)
  
  data Contabentry_Ternary = Contabentry_Ternary
      { contabentry_TernaryArgBaseRel :: Baserel
      , contabentry_TernaryConverseBaseRels :: [Baserel]
      } deriving (Eq, Show)
  
  data Reftabentry = Reftabentry
       { reftabentryArgBaseRel :: Baserel
       , reftabentryReflectiveBaseRel :: Baserel
       } deriving (Eq, Show)
  
  data Model = Model
      { modelString1 :: String
      , modelString2 :: String
      } deriving (Eq, Show)
  
  newtype Baserel = Baserel
      { baserelBaserel :: String
      } deriving (Eq, Ord)
  
  instance Show Baserel where
   show (Baserel b) = "Baserel: " ++ b
  