-
Notifications
You must be signed in to change notification settings - Fork 2
/
patterns.mli
109 lines (88 loc) · 3.34 KB
/
patterns.mli
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Gabriel Scherer, projet Partout, INRIA Paris-Saclay *)
(* Thomas Refis, Jane Street Europe *)
(* *)
(* Copyright 2019 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
open Asttypes
open Typedtree
open Types
val omega : pattern
(** aka. "Tpat_any" or "_" *)
val omegas : int -> pattern list
(** [List.init (fun _ -> omega)] *)
val omega_list : 'a list -> pattern list
(** [List.map (fun _ -> omega)] *)
module Non_empty_row : sig
type 'a t = 'a * Typedtree.pattern list
val of_initial : Typedtree.pattern list -> Typedtree.pattern t
(** 'assert false' on empty rows *)
val map_first : ('a -> 'b) -> 'a t -> 'b t
end
module Simple : sig
type view = [
| `Any
| `Constant of constant
| `Tuple of pattern list
| `Construct of
Longident.t loc * constructor_description * pattern list
| `Variant of label * pattern option * row_desc ref
| `Record of
(Longident.t loc * label_description * pattern) list * closed_flag
| `Array of pattern list
| `Lazy of pattern
]
type pattern = view pattern_data
val omega : [> view ] pattern_data
end
module Half_simple : sig
type view = [
| Simple.view
| `Or of pattern * pattern * row_desc option
]
type pattern = view pattern_data
end
module General : sig
type view = [
| Half_simple.view
| `Var of Ident.t * string loc
| `Alias of pattern * Ident.t * string loc
]
type pattern = view pattern_data
val view : Typedtree.pattern -> pattern
val erase : [< view ] pattern_data -> Typedtree.pattern
val strip_vars : pattern -> Half_simple.pattern
end
module Head : sig
type desc =
| Any
| Construct of constructor_description
| Constant of constant
| Tuple of int
| Record of label_description list
| Variant of
{ tag: label; has_arg: bool;
cstr_row: row_desc ref;
type_row : unit -> row_desc; }
(* the row of the type may evolve if [close_variant] is called,
hence the (unit -> ...) delay *)
| Array of int
| Lazy
type t = desc pattern_data
val arity : t -> int
(** [deconstruct p] returns the head of [p] and the list of sub patterns.
@raise [Invalid_arg _] if [p] is an or- or an exception-pattern. *)
val deconstruct : Simple.pattern -> t * pattern list
(** reconstructs a pattern, putting wildcards as sub-patterns. *)
val to_omega_pattern : t -> pattern
val omega : t
end