module CSPM.LTS.LTS
where
import CSPM.FiringRules.Rules
import CSPM.Interpreter as Interpreter
import CSPM.Interpreter.Hash
import Data.Typeable
import Data.Map (Map)
import Data.Ord (comparing)
import Data.Function (on)
data LtsNode
= LtsNode {
nodeDigest :: ! Interpreter.Digest
,nodeProcess :: Interpreter.Process
} deriving Typeable
mkLtsNode :: Interpreter.Process -> LtsNode
mkLtsNode p = LtsNode {
nodeDigest = hash p
,nodeProcess = p }
instance Ord LtsNode where compare = comparing nodeDigest
instance Eq LtsNode where (==) = on (==) nodeDigest
instance Show LtsNode where
show f = "(LTSNode " ++ (show $ nodeDigest f) ++ ")"
type LTS = Map LtsNode [Rule INT]