dtlc

dependently-typed lambda calculus toy
git clone git://git.rr3.xyz/dtlc
Log | Files | Refs | README | LICENSE

commit b54df0410d20da05e9dc5d064fe16ba62f9beff7
parent 9a8eb672e0e4035f7764ad9c71baaad617dad523
Author: Robert Russell <robertrussell.72001@gmail.com>
Date:   Wed, 17 Jan 2024 03:41:13 -0800

Pretty printing looking real pretty

Diffstat:
Mmain.ml | 11++++++-----
Mpretty.ml | 31++++++++++++++-----------------
2 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/main.ml b/main.ml @@ -2,7 +2,6 @@ open Node module I = Internal module V = Value -(* let buf = Lexing.from_string "\ N := [A: Type, A, A -> A] -> A;\n\ add: [N, N] -> N := fn m, n => fn A, z, s => m A (n A z s) s;\n\ @@ -11,12 +10,14 @@ let buf = Lexing.from_string "\ five := add two three;\n\ five Nat 0 (fn n => n + 1)\n\ " -*) + +(* let buf = Lexing.from_string "\ f := fn a: Nat, b: Nat, c: Nat, d: Nat, e: Nat, f: Nat, g: Nat, h: Nat =>\ - fn a: Nat, b: Nat, c: Nat, d: Nat, e: Nat, f: Nat, g: Nat, h: Nat => 3; 3\ + fn a: Nat, b: Nat -> Nat -> Nat -> Nat -> Nat -> Nat -> Nat, c: Nat, d: Nat, e: Nat, f: Nat, g: Nat, h: Nat => 3; 3\ " +*) (* let buf = Lexing.from_string "\ @@ -35,8 +36,8 @@ let buf = Lexing.from_string "\ (* let buf = Lexing.from_string "\ - T & S := #{@a Nat; @b #()};\n\ - @a 3 : S\n\ + T & S := #{@a Nat, Nat, Nat, Nat, Nat, Nat, Nat, Nat, Nat, Nat, Nat, Nat; @b #()};\n\ + @a 0 1 2 3 4 5 6 7 8 9 10 11 : S\n\ " *) diff --git a/pretty.ml b/pretty.ml @@ -15,40 +15,40 @@ and pp_print_term : int -> F.formatter -> term -> unit = fun m ppf -> function | Let (definers, body) -> - pp_print_with_parens m 0 ppf "@[<v 0>%a;@,@[%a@]@]" + pp_print_with_parens m 0 ppf "@[<v>@[%a@];@,%a@]" (F.pp_print_array ~pp_sep:pp_print_comma pp_print_definer) definers (pp_print_term 0) body (* TODO: Match *) | App (fn, args) -> - pp_print_with_parens m 5 ppf "%a%a" + pp_print_with_parens m 5 ppf "@[<4>%a%a@]" (pp_print_term 6) fn pp_print_args args | Fn {multibinder = {binders; _}; body; codomain} -> - pp_print_with_parens m 1 ppf "@[<hv>fn@;<1 4>@[<hv 0>%a@]%a:: %a =>@;<1 4>@[<h>%a@]@]" + pp_print_with_parens m 1 ppf "@[@[<hv 4>fn@ %a%t::@ %a@;<1 -4>@]=>@;<1 4>%a@]" pp_print_binders binders - pp_print_trailing_delim (1, ",") + (F.pp_print_custom_break ~fits:(" ", 0, "") ~breaks:(",", -4, "")) (pp_print_term 2) codomain (pp_print_term 1) body | FnType {multibinder = {binders; _}; codomain} -> - pp_print_with_parens m 3 ppf "[@;<0 4>@[<hv 0>%a@]%a] -> %a" + pp_print_with_parens m 3 ppf "@[@[<hv 4>[@,%a%t@]] ->@;<1 4>%a@]" pp_print_binders binders - pp_print_trailing_delim (0, ",") + (F.pp_print_custom_break ~fits:("", 0, "") ~breaks:(",", -4, "")) (pp_print_term 3) codomain | Data {tag; args; datatype; _} -> - pp_print_with_parens m 5 ppf "@[<4>%a%a: %a@]" + pp_print_with_parens m 2 ppf "@[@[<4>%a%a@] ::@;<1 4>%a@]" Name.Ctor.pp_print tag pp_print_args args (pp_print_term 2) (DataType datatype) | DataType {ctors; names} -> - pp_print_with_parens m 6 ppf "@[#{@[<hv 4>@,%a@]%a}@]" + pp_print_with_parens m 6 ppf "@[@[<hv 4>#{@,%a%t@]}@]" pp_print_ctors (ctors, names) - pp_print_trailing_delim (0, ";") + (F.pp_print_custom_break ~fits:("", 0, "") ~breaks:(";", -4, "")) | Nat n -> pp_print_with_parens m 6 ppf "%a" @@ -71,8 +71,9 @@ and pp_print_term and pp_print_definer : F.formatter -> definer -> unit = fun ppf {names; rhs; typ} -> - F.fprintf ppf "@[@[<hv>%a: %a@] :=@;<1 4>@[%a@]@]" + F.fprintf ppf "@[@[<hv 4>%a%t%a@;<1 -4>@]:=@;<1 4>%a@]" pp_print_names names + (F.pp_print_custom_break ~fits:(": ", 0, "") ~breaks:(" :", 0, "")) (pp_print_term 2) typ (pp_print_term 1) rhs @@ -92,9 +93,10 @@ and pp_print_binders and pp_print_binder : F.formatter -> binder -> unit = fun ppf {plicity; names; typ} -> - F.fprintf ppf "@[%a%a: %a@]" + F.fprintf ppf "@[%a%a%t%a@]" pp_print_plicity plicity pp_print_names names + (F.pp_print_custom_break ~fits:(": ", 0, "") ~breaks:(" :", 4, "")) (pp_print_term 2) typ and pp_print_ctors @@ -109,7 +111,7 @@ and pp_print_ctors match ctors.(tagi).binders with | [||] -> Name.Ctor.pp_print ppf tag | binders -> - F.fprintf ppf "@[<4>%a%a@]" + F.fprintf ppf "@[<4>%a@ %a@]" Name.Ctor.pp_print tag pp_print_binders binders ) names @@ -130,11 +132,6 @@ and pp_print_name : F.formatter -> Name.Var.t node -> unit = fun ppf {data = name; _} -> Name.Var.pp_print ppf name -and pp_print_trailing_delim -: F.formatter -> int * string -> unit -= fun ppf (n, d) -> - F.pp_print_custom_break ppf ~fits:("", n, "") ~breaks:(d, 0, "") - and pp_print_comma : F.formatter -> unit -> unit = fun ppf () -> F.fprintf ppf ",@ "