module CSPM.Compiler.Processes ( Proc(..), ProcName ) where import CSPM.Compiler.Events import Util.PrettyPrint type ProcName = String data Proc = PAlphaParallel [(EventSet, Proc)] | PException Proc EventSet Proc | PExternalChoice [Proc] | PGenParallel EventSet [Proc] | PHide Proc EventSet | PInternalChoice [Proc] | PInterrupt Proc Proc | PInterleave [Proc] | PPrefix Event Proc | PSequentialComp Proc Proc | PSlidingChoice Proc Proc -- TODO: -- | PLinkParallel EventMap [Proc] -- | PRename EventMap Proc -- | POperator ProcOperator Proc -- where: -- data ProcOperator = Normalise | Explicate | StrongBisim | TauLoopFactor | Diamond | ModelCompress | PProcCall ProcName (Maybe Proc) instance PrettyPrintable Proc where prettyPrint (PAlphaParallel aps) = text "||" <+> braces (list (map (\ (a,p) -> parens (prettyPrint a <> char ',' <+> prettyPrint p)) aps)) prettyPrint (PException p1 a p2) = prettyPrint p1 <+> text "[|" <> prettyPrint a <> text "|>" <+> prettyPrint p2 prettyPrint (PExternalChoice ps) = sep (punctuate (text " []") (map prettyPrint ps)) prettyPrint (PGenParallel a ps) = text "||" <+> brackets (prettyPrint a) <+> braces (list (map prettyPrint ps)) prettyPrint (PHide p a) = prettyPrint p <+> char '\\' <+> prettyPrint a prettyPrint (PInternalChoice ps) = sep (punctuate (text " |~|") (map prettyPrint ps)) prettyPrint (PInterleave ps) = sep (punctuate (text " |||") (map prettyPrint ps)) prettyPrint (PPrefix e p) = prettyPrint e <+> text "->" <+> prettyPrint p prettyPrint (PSequentialComp p1 p2) = prettyPrint p1 <+> text "->" <+> prettyPrint p2 prettyPrint (PSlidingChoice p1 p2) = prettyPrint p1 <+> text "|>" <+> prettyPrint p2 prettyPrint (PProcCall s _) = text s instance Show Proc where show p = show (prettyPrint p)