CSPM-CoreLanguage-0.3.0.0: src/CSPM/CoreLanguage/Event.hs
-----------------------------------------------------------------------------
-- |
-- Module : CSPM.CoreLanguage.Event
-- Copyright : (c) Fontaine 2010 - 2011
-- License : BSD3
--
-- Maintainer : fontaine@cs.uni-duesseldorf.de
-- Stability : experimental
-- Portability : GHC-only
--
-- This modules defines the event-related part of an interface between
-- the CSPM-CoreLanguage and the underlying implementation.
-- The underlying implementation has to instantiate the type-families 'Event',
-- 'EventSet', 'RenamingRelation'
-- and the class 'BE' ('BE'== base event).
--
-- For full CSPM-support (channels with multiple fields, event closure sets etc.)
-- CSPM.CoreLanguage.Field is also needed.
-----------------------------------------------------------------------------
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveDataTypeable #-}
module CSPM.CoreLanguage.Event
where
import Data.Typeable
type family Event i
type family EventSet i
type family RenamingRelation i
-- | Sigma is the set of all events that appear in a system.
type Sigma i = EventSet i
-- | The first argument of all function in 'BE' is a phantom-type-argument, i.e.
-- applications pass _|_ and implementations must not use this value.
class BE i where
eventEq :: i -> Event i -> Event i -> Bool
member :: i -> Event i -> EventSet i -> Bool
intersection :: i -> EventSet i -> EventSet i -> EventSet i
difference :: i -> EventSet i -> EventSet i -> EventSet i
union :: i -> EventSet i -> EventSet i -> EventSet i
null :: i -> EventSet i -> Bool
singleton :: i -> Event i -> EventSet i
insert :: i -> Event i -> EventSet i -> EventSet i
delete :: i -> Event i -> EventSet i -> EventSet i
eventSetToList :: i -> EventSet i -> [Event i]
allEvents :: i -> EventSet i
isInRenaming :: i -> RenamingRelation i -> Event i -> Event i -> Bool
imageRenaming :: i -> RenamingRelation i -> Event i -> [Event i]
preImageRenaming :: i -> RenamingRelation i -> Event i -> [Event i]
isInRenamingDomain :: i -> Event i -> RenamingRelation i -> Bool
isInRenamingRange :: i -> Event i -> RenamingRelation i -> Bool
getRenamingDomain :: i -> RenamingRelation i -> [Event i]
getRenamingRange :: i -> RenamingRelation i -> [Event i]
renamingFromList :: i -> [(Event i, Event i)] -> RenamingRelation i
renamingToList :: i -> RenamingRelation i -> [(Event i, Event i)]
singleEventToClosureSet :: i -> Event i -> EventSet i
-- | A wrapper for tick-events, tau-events and events from Sigma.
data TTE i
= TickEvent
| TauEvent
| SEvent (Event i)
deriving Typeable
class ShowEvent i where showEvent :: i -> String
class ShowTTE i where showTTE :: i -> String