CurryInfo: coosy-3.1.0 / Coosy.ShowObserve.prettierTerm

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))
demand:
no demanded arguments
deterministic:
deterministic operation
failfree:
<FAILING>
indeterministic:
referentially transparent operation
infix:
no fixity defined
iotype:
{(_) |-> {prettierTerm.render.177}}
name:
prettierTerm
precedence:
no precedence defined
result-values:
{prettierTerm.render.177}
signature:
ViewConf -> Term -> Coosy.Prettier.DOC
solution-complete:
operation might suspend on free variables
terminating:
possibly non-terminating
totally-defined:
possibly non-reducible on same data term