module Language.Cap.Interpret.Pretty (PrettyTerm(..),Mapping(..),pretty) where -- | Defines terms that can be displayed by the debugger (ready for pretty -- printing. data PrettyTerm = PAtom String | PApplication PrettyTerm PrettyTerm | PMap [Mapping] -- | Defines a mapping ready for display by the pretty printer. data Mapping = M [PrettyTerm] PrettyTerm -- | Pretty prints a given pretty term pretty :: PrettyTerm -> String pretty = pretty' False pretty' :: Bool -> PrettyTerm -> String pretty' _ (PAtom a) = a pretty' True (PApplication f a) = "(" ++ (pretty' False f) ++ " " ++ (pretty' True a) ++ ")" pretty' False (PApplication f a) = (pretty' False f) ++ " " ++ (pretty' True a) pretty' _ (PMap ms) = "{" ++ commas (map prettyMap ms) ++ "}" prettyMap :: Mapping -> String prettyMap (M as r) = unwords (map pretty as) ++ " -> " ++ pretty r commas [] = [] commas [x] = x commas (x:xs) = x ++ ", " ++ commas xs