fix: pretty printing multiple universe levels

Fixes #190
This commit is contained in:
Sebastian Ullrich 2020-09-25 20:06:18 +02:00
parent 240680db1a
commit eae32b08a6
4 changed files with 9 additions and 4 deletions

View file

@ -540,13 +540,16 @@ Syntax.ident {} (toString val).toSubstring val []
@[inline] def mkNullNode (args : Array Syntax := #[]) : Syntax :=
Syntax.node nullKind args
def mkSepStx (a : Array Syntax) (sep : Syntax) : Syntax :=
mkNullNode $ a.iterate #[] $ fun i a r =>
def mkSepArray (a : Array Syntax) (sep : Syntax) : Array Syntax :=
a.iterate #[] $ fun i a r =>
if i.val > 0 then
(r.push sep).push a
else
r.push a
def mkSepStx (a : Array Syntax) (sep : Syntax) : Syntax :=
mkNullNode $ mkSepArray a sep
def mkOptionalNode (arg : Option Syntax) : Syntax :=
match arg with
| some arg => Syntax.node nullKind #[arg]

View file

@ -320,7 +320,7 @@ ppUnivs ← getPPOption getPPUniverses;
if ls.isEmpty || !ppUnivs then
pure $ mkIdent c
else
`($(mkIdent c).{$(ls.toArray.map quote)*})
`($(mkIdent c).{$(mkSepArray (ls.toArray.map quote) (mkAtom ","))*})
inductive ParamKind
| explicit
@ -563,7 +563,7 @@ let fieldNames := getStructureFields env s.induct;
];
pure (idx + 1, fields.push field)
};
let fields := (mkSepStx fields (mkAtom ",")).getArgs;
let fields := mkSepArray fields (mkAtom ",");
condM (getPPOption getPPStructureInstanceType)
(do
ty ← inferType e;

View file

@ -50,6 +50,7 @@ section
set_option pp.universes true
#eval check `(List Nat)
#eval check `(id Nat)
#eval check `(Sum Nat Nat)
end
#eval check `(id (id Nat)) (Std.RBMap.empty.insert 4 $ KVMap.empty.insert `pp.explicit true)

View file

@ -12,6 +12,7 @@ List Nat
@id Type Nat
List.{0} Nat
id.{2} Nat
Sum.{0, 0} Nat Nat
id (@id Type Nat)
fun (a : Nat) => a
fun (a b : Nat) => a