Print_CspCASL.hs revision 2f35e5f6757968746dbab385be21fcae52378a3f
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann{- |
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannModule : $Id$
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannDescription : Pretty printing for CspCASL
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannCopyright : (c) Andy Gimblett and Uni Bremen 2006
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannMaintainer : a.m.gimblett@swansea.ac.uk
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannStability : provisional
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannPortability : portable
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannPrinting abstract syntax of CSP-CASL
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-}
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannmodule CspCASL.Print_CspCASL where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport CASL.ToDoc ()
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport Common.Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport Common.DocUtils
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport Common.Keywords (elseS, ifS, thenS)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport CspCASL.AS_CspCASL
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport CspCASL.AS_CspCASL_Process
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport CspCASL.CspCASL_Keywords
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannimport qualified Data.Set as S
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty CspBasicSpec where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printCspBasicSpec
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintCspBasicSpec :: CspBasicSpec -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintCspBasicSpec ccs =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann chan_part $+$ proc_part
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann where chan_part = case (length chans) of
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann 0 -> empty
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann 1 -> (keyword channelS) <+> printChanDecs chans
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> (keyword channelsS) <+> printChanDecs chans
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann proc_part = (keyword processS) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (printProcItems (proc_items ccs))
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann chans = channels ccs
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintChanDecs :: [CHANNEL_DECL] -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintChanDecs cds = (vcat . punctuate semi . map pretty) cds
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty CHANNEL_DECL where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printChanDecl
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintChanDecl :: CHANNEL_DECL -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintChanDecl (ChannelDecl ns s) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (ppWithCommas ns) <+> colon <+> (pretty s)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcItems :: [PROC_ITEM] -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcItems ps = foldl ($+$) empty (map pretty ps)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty PROC_ITEM where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printProcItem
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcItem :: PROC_ITEM -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcItem (Proc_Decl pn args alpha) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty pn) <> (printArgs args) <+> colon <+> (pretty alpha) <+> semi
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann where printArgs [] = empty
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann printArgs a = parens $ ppWithCommas a
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcItem (Proc_Eq pn p) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty pn) <+> equals <+> (pretty p)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty PARM_PROCNAME where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printParmProcname
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintParmProcname :: PARM_PROCNAME -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintParmProcname (ParmProcname pn args) =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty pn <> (printArgs args)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann where printArgs [] = empty
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann printArgs a = parens $ ppWithCommas a
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty PROC_ALPHABET where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printProcAlphabet
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcAlphabet :: PROC_ALPHABET -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcAlphabet (ProcAlphabet commTypes _) = ppWithCommas commTypes
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty PROCESS where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty = printProcess
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcess :: PROCESS -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel HausmannprintProcess pr = case pr of
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 0
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Skip _ -> text skipS
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Stop _ -> text stopS
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Div _ -> text divS
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Run es _ -> (text runS) <+> lparen <+> (pretty es) <+> rparen
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Chaos es _ -> (text chaosS) <+> lparen <+> (pretty es) <+> rparen
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann NamedProcess pn ts _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty pn) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann if (null ts)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann then ppWithCommas ts
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann else lparen <+> (ppWithCommas ts) <+> rparen
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 1
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ConditionalProcess f p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ((keyword ifS) <+> (pretty f) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (keyword thenS) <+> (glue pr p) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (keyword elseS) <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann )
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 2
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Hiding p es _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> hiding_proc <+> (pretty es)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann RenamingProcess p r _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ((pretty p) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ren_proc_open <+> (ppWithCommas r) <+> ren_proc_close)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 3
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Sequential p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> sequential <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann PrefixProcess ev p _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty ev) <+> prefix_proc <+> (glue pr p)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann InternalPrefixProcess v s p _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (internal_choice <+> (pretty v) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (text svar_sortS) <+> (pretty s) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann prefix_proc <+> (glue pr p)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann )
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ExternalPrefixProcess v s p _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (external_choice <+> (pretty v) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (text svar_sortS) <+> (pretty s) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann prefix_proc <+> (glue pr p)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann )
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 4
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann InternalChoice p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> internal_choice <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ExternalChoice p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> external_choice <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann -- precedence 5
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Interleaving p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> interleave <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann SynchronousParallel p q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty p) <+> synchronous <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann GeneralisedParallel p es q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ((pretty p) <+> genpar_open <+> (pretty es) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann genpar_close <+> (glue pr q))
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann AlphabetisedParallel p les res q _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ((pretty p) <+> alpar_open <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann (pretty les) <+> alpar_sep <+> (pretty res) <+>
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann alpar_close <+> (glue pr q)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann )
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann FQProcess p commAlpha _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann let commAlphaList = S.toList commAlpha
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann prettyComms cs = sepByCommas (map pretty cs)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann in brackets(pretty p) <> text "_" <> braces (prettyComms commAlphaList)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmanninstance Pretty CommType where
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty (CommTypeSort s) = pretty s
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann pretty (CommTypeChan (TypedChanName c s)) = parens (sepByCommas [pretty c, pretty s])
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- glue and prec_comp decide whether the child in the parse tree needs
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- to be parenthesised or not. Parentheses are necessary if the
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- right-child is at the same level of precedence as the parent but is
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- a different operator; otherwise, they're not.
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannglue :: PROCESS -> PROCESS -> Doc
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannglue x y = if (prec_comp x y)
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann then lparen <+> pretty y <+> rparen
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann else pretty y
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- This is really nasty, but sledgehammer effective and allows fine
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- control. Unmaintainable, however. :-( I imagine there's a way to
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- compare the types in a less boilerplate manner, but OTOH there are
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- some special cases where it's nice to be explicit. Also, hiding
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann-- and renaming are distinctly non-standard. *shrug*
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannprec_comp :: PROCESS -> PROCESS -> Bool
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmannprec_comp x y =
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case x of
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Hiding _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of RenamingProcess _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann RenamingProcess _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Hiding _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Sequential _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of InternalPrefixProcess _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ExternalPrefixProcess _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann PrefixProcess _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Sequential _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann InternalPrefixProcess _ _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Sequential _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ExternalPrefixProcess _ _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Sequential _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann ExternalChoice _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of InternalChoice _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann InternalChoice _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of ExternalChoice _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann Interleaving _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of SynchronousParallel _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann GeneralisedParallel _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann AlphabetisedParallel _ _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann SynchronousParallel _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Interleaving _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann GeneralisedParallel _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann AlphabetisedParallel _ _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann GeneralisedParallel _ _ _ _ ->
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann case y of Interleaving _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann SynchronousParallel _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann AlphabetisedParallel _ _ _ _ _ -> True
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann _ -> False
2450a4210dee64b064499a3a1154129bdfc74981Daniel Hausmann AlphabetisedParallel _ _ _ _ _ ->
case y of Interleaving _ _ _ -> True
SynchronousParallel _ _ _ -> True
GeneralisedParallel _ _ _ _ -> True
_ -> False
_ -> False
instance Pretty EVENT where
pretty = printEvent
printEvent :: EVENT -> Doc
printEvent (TermEvent t _) = pretty t
printEvent (ChanSend cn t _) = (pretty cn) <+>
(text chan_sendS) <+>
(pretty t)
printEvent (ChanNonDetSend cn v s _) =
(pretty cn) <+> (text chan_sendS) <+>
(pretty v) <+> (text svar_sortS) <+> (pretty s)
printEvent (ChanRecv cn v s _) =
(pretty cn) <+> (text chan_receiveS) <+>
(pretty v) <+> (text svar_sortS) <+> (pretty s)
instance Pretty EVENT_SET where
pretty = printEventSet
printEventSet :: EVENT_SET -> Doc
printEventSet (EventSet es _) = ppWithCommas es