1 (* Copyright (C) 2017 Matthew Fluet.
2 * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 * Copyright (C) 1997-2000 NEC Research Institute.
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
10 signature INTERFACE_STRUCTS =
13 structure AdmitsEquality: ADMITS_EQUALITY
14 structure Kind: TYCON_KIND
19 val admitsEquality: t -> AdmitsEquality.t
21 val equals: t * t -> bool
24 val layout: t -> Layout.t
27 * LayoutPretty.t vector
28 * {layoutPretty: t -> Layout.t}
30 val layoutAppPrettyNormal:
32 * LayoutPretty.t vector
39 val layout: t -> Layout.t
44 val makeNoname: {equality: bool} -> t
47 -> {destroy: unit -> unit,
48 layoutPretty: t -> Layout.t,
49 localInit: t vector -> unit}
55 include INTERFACE_STRUCTS
57 structure FlexibleTycon:
62 val admitsEquality: t -> AdmitsEquality.t
63 val dest: t -> {admitsEquality: AdmitsEquality.t,
66 prettyDefault: string}
67 val layout: t -> Layout.t
68 val layoutPrettyDefault: t -> Layout.t
69 val plist: t -> PropertyList.t
70 val new: {admitsEquality: AdmitsEquality.t,
73 prettyDefault: string,
74 region: Region.t} -> t
75 val realize: t * EnvTypeStr.t -> unit
76 datatype realization =
77 ETypeStr of EnvTypeStr.t
79 val realization: t -> realization option
80 val setAdmitsEquality: t * AdmitsEquality.t -> unit
85 Flexible of FlexibleTycon.t
87 val admitsEquality: t -> AdmitsEquality.t
89 structure Record: RECORD
90 sharing Record = Ast.SortedRecord
96 val con: Tycon.t * t vector -> t
97 val deArrow: t -> t * t
98 val deEta: t * Tyvar.t vector -> Tycon.t option
100 val hom: t * {con: Tycon.t * 'a vector -> 'a,
101 record: 'a Record.t -> 'a,
102 var: Tyvar.t -> 'a} -> 'a
103 val layout: t -> Layout.t
106 layoutPrettyEnvTycon: EnvTycon.t -> Layout.t,
107 layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t,
108 layoutPrettyTyvar: Tyvar.t -> Layout.t}
110 val record: t Record.t -> t
111 val var: Tyvar.t -> t
115 datatype t = Con | Exn | Var
117 val layout: t -> Layout.t
118 val toString: t -> string
128 datatype t = T of {ty: Type.t,
129 tyvars: Tyvar.t vector}
131 val admitsEquality: t -> bool
132 val fromTycon: Tycon.t -> t
133 val make: Tyvar.t vector * Type.t -> t
139 val dest: t -> {name: Ast.Con.t,
140 scheme: Scheme.t} vector
142 val fromSortedVector: {name: Ast.Con.t,
143 scheme: Scheme.t} vector -> t
144 val fromVector: {name: Ast.Con.t,
145 scheme: Scheme.t} vector -> t
146 val layout: t -> Layout.t
147 val map: t * ({name: Ast.Con.t,
149 -> {scheme: Scheme.t}) -> t
156 Datatype of {tycon: Tycon.t,
160 | Tycon of {eq: bool,
164 val admitsEquality: t -> AdmitsEquality.t
165 val apply: t * Type.t vector -> Type.t
166 val cons: t -> Cons.t
167 val data: Tycon.t * Cons.t * bool -> t
168 val def: Scheme.t -> t
169 val kind: t -> Kind.t
170 val layout: t -> Layout.t
172 val pushSpec: t * Region.t -> unit
174 val toTyconOpt: t * {expand: bool} -> Tycon.t option (* NONE on Scheme *)
175 val tycon: Tycon.t * bool -> t
176 val specs: t * Region.t -> Region.t list
179 {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t,
180 layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t,
183 ty1: {name: unit -> Layout.t,
187 ty2: {name: unit -> Layout.t,
193 {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t,
194 layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t,
198 ty: {name: unit -> Layout.t,
204 sharing type FlexibleTycon.typeStr = TypeStr.t
207 datatype 'a t = T of {strs: (Ast.Strid.t * 'a t) array,
208 types: (Ast.Tycon.t * 'a) array}
210 val empty: unit -> 'a t
211 val layout: ('a -> Layout.t) -> 'a t -> Layout.t
212 val peekStrid: 'a t * Ast.Strid.t -> 'a t option
213 val peekTycon: 'a t * Ast.Tycon.t ->'a option
218 val copy: t -> t (* copy renames all flexible tycons. *)
219 val equals: t * t -> bool
220 val dest: t -> {strs: (Ast.Strid.t * t) array,
221 types: (Ast.Tycon.t * TypeStr.t) array,
222 vals: (Ast.Vid.t * (Status.t * Scheme.t)) array}
224 val flexibleTycons: t -> FlexibleTycon.t TyconMap.t
225 val layout: t -> Layout.t
227 t * Ast.Longstrid.t * Region.t * {prefix: Ast.Strid.t list}
230 t * Ast.Longtycon.t * Region.t * {prefix: Ast.Strid.t list}
231 -> (Ast.Tycon.t * TypeStr.t) option
232 val new: {isClosed: bool,
234 strs: (Ast.Strid.t * t) array,
235 types: (Ast.Tycon.t * TypeStr.t) array,
236 vals: (Ast.Vid.t * (Status.t * Scheme.t)) array} -> t
238 val peekStrid: t * Ast.Strid.t -> t option
239 datatype 'a peekResult =
241 | UndefinedStructure of Ast.Strid.t list
242 val peekStrids: t * Ast.Strid.t list -> t peekResult
243 val peekTycon: t * Ast.Tycon.t -> (Ast.Tycon.t * TypeStr.t) option
244 val plist: t -> PropertyList.t
246 {layoutPrettyEnvTycon: EnvTycon.t -> Layout.t,
247 layoutPrettyFlexTycon: FlexibleTycon.t -> Layout.t,
248 I1: t, long1: Ast.Longstrid.t,
249 I2: t, long2: Ast.Longstrid.t,