definition:
|
prettierTerm :: ViewConf -> Term -> DOC
prettierTerm viewConf = render 0 False
where
render :: Int -> Bool -> Term -> DOC
render prec _ (Cons name args)
| name=="(:)" && length args == 2 =
paren (prec > 5)
(nest 2
(render 10 False (head args) <> text ":" <> render 5 False (args!!1)))
| take 2 name == "(," = -- tuple
paren (prec /= 0)
(nest 2
(foldr (<>) nil . intersperse (text ",") .
map ((Prettier.break <>) . render 10 False) $ args))
{-| isChar name = -- char
text (showTerm name)
| name == "'\t'" = -- Char tab
text "'\\t'"
| name == "'\r'" = -- Char line feed
text "'\\r'"
| name == "'\f'" = -- Char form feed
text "'\\f'"-}
| otherwise =
paren (length args > 0 && prec /= 0)
(nest 2 (text name <>
(foldr (<>) nil . map ((Prettier.sep <>) . render 10 False) $ args)))
where isChar "" = False
isChar (c:_) | c== '\'' = True
| otherwise = False
render _ _ (FunTerm pairs) =
if length maps == 1
then text "{ " <> renderMap (head maps) <> text " }"
else text "{ " <> foldl1 (\ a b -> a <> line <> text ", " <> b)
(map renderMap maps) <> line <> text "}"
where
maps = findMaps pairs
render prec par (LogVarTerm val) =
if val == Bottom
then text "?"
else case viewConf of
ShowLogVarBinds ->
paren (prec < 10 || par)
(text "?" <> text "/" <> Prettier.break <> render 9 False val)
HideLogVarBinds ->
render prec par val
render _ _ UnEval = text "_"
render _ _ Bottom = text "!"
render prec par (Black t)
= text [chr 7] <> (render prec par t) <> text [chr 7]
renderMap :: ([Term],Term) -> DOC
renderMap (args,res) =
group (nest 3
(text "\\ " <>
foldr (\ a b -> nest 0 (render 10 False a) <> sp <> b)
nil
args <> sep <> text "-> " <> render 0 False res))
|