summaryrefslogtreecommitdiff
path: root/src/Obs/Pretty.idr
blob: 656f352b5907c49463ed943a7ad80923c37f2e6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module Obs.Pretty

import public Text.PrettyPrint.Prettyprinter

-- ty is rendered Open
export
prettyDecl : (name : Maybe String) -> (ty : Doc ann) -> Doc ann
prettyDecl Nothing ty = parens $ group $ align ty
prettyDecl (Just name) ty = parens $ align $ group (pretty name <++> colon <+> line <+> align ty)

-- names are rendered Open
export
prettyDeclForm : (prec : Prec) ->
  (decls : List (Doc ann)) ->
  (sep : String) ->
  (tail : Doc ann) ->
  Doc ann
prettyDeclForm d decls sep tail =
  parenthesise (d > Open) $
  align $
  group $
  concatWith (\x, y => x <++> pretty sep <+> line <+> y) $
  decls ++ [align tail]

-- body is rendered Open
export
prettyLambda : (prec : Prec) -> (name : String) -> (body : Doc ann) -> Doc ann
prettyLambda d name body =
  parenthesise (d >= App) $ align $ group $
  vsep [backslash <+> pretty name <++> pretty "=>", align body]

-- head is rendered Open, tail are rendered App
export
prettyApp : (prec : Prec) -> (head : Doc ann) -> (tail : List (Doc ann)) -> Doc ann
prettyApp d head tail =
  parenthesise (d >= App) $ align $ group $ vsep (align head :: map (hang 2) tail)

-- first and second are rendered Open
export
prettyPair : (first, second : Doc ann) -> Doc ann
prettyPair first second =
  angles $ align $ group $
  neutral <++> align first <+> comma <+> line <+> align second <++> neutral

-- left and right are rendered Equal
export
prettyEqual : (prec : Prec) -> (left, right : Doc ann) -> Doc ann
prettyEqual d left right =
  parenthesise (d >= Equal) $ align $ group $ vsep [align left <++> pretty "~", align right]