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
(** Copyright 2025, Ksenia Kotelnikova <xeniia.ka@gmail.com>, Sofya Kozyreva <k81sofia@gmail.com>, Vyacheslav Kochergin <vyacheslav.kochergin1@gmail.com> *)
(** SPDX-License-Identifier: LGPL-3.0-or-later *)
open TypedTree
open Format
let rec pp_typ fmt = function
| Primitive s -> fprintf fmt "%s" s
| Type_var var -> fprintf fmt "'%d" var
| Arrow (fst, snd) ->
(match fst with
| Arrow _ -> fprintf fmt "(%a) -> %a" pp_typ fst pp_typ snd
| _ -> fprintf fmt "%a -> %a" pp_typ fst pp_typ snd)
| Type_list typ -> fprintf fmt "%a list" pp_typ typ
| Type_tuple (first, second, rest) ->
Format.pp_print_list
~pp_sep:(fun fmt () -> fprintf fmt " * ")
(fun fmt typ ->
match typ with
| Arrow _ -> fprintf fmt "(%a)" pp_typ typ
| _ -> pp_typ fmt typ)
fmt
(first :: second :: rest)
| TOption t ->
(match t with
| Type_tuple _ | Arrow _ -> fprintf fmt "(%a) option" pp_typ t
| t -> fprintf fmt "%a option" pp_typ t)
| TActPat (name, t) -> fprintf fmt "%s (%a)" name pp_typ t
| Choice map ->
fprintf fmt "Choice<";
(pp_print_list ~pp_sep:(fun fmt () -> fprintf fmt ", ") pp_typ fmt)
(choice_to_list map);
fprintf fmt ">"
;;