Import Upstream version 20180207
[hcoop/debian/mlton.git] / lib / mlton / env / mono-env.sig
CommitLineData
7f918cf1
CE
1(* Copyright (C) 2009 Matthew Fluet.
2 * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 *
5 * MLton is released under a BSD-style license.
6 * See the file MLton-LICENSE for details.
7 *)
8
9signature MONO_ENV_STRUCTS =
10 sig
11 structure Domain: T
12 structure Range: T
13 end
14
15signature BASIC_MONO_ENV =
16 sig
17 include MONO_ENV_STRUCTS
18
19 type t
20 val extend: t * Domain.t * Range.t -> t
21 val fromList: (Domain.t * Range.t) list -> t
22 val peek: t * Domain.t -> Range.t option
23 val toList: t -> (Domain.t * Range.t) list
24 end
25
26signature MONO_ENV =
27 sig
28 include BASIC_MONO_ENV
29
30 val + : t * t -> t
31 val domain: t -> Domain.t list
32 val empty: t
33 val equals: t * t -> bool
34 val fold: t * 'a * (Range.t * 'a -> 'a) -> 'a
35 val foldi: t * 'a * (Domain.t * Range.t * 'a -> 'a) -> 'a
36 val foreach: t * (Range.t -> unit) -> unit
37 val foreachi: t * (Domain.t * Range.t -> unit) -> unit
38 val isEmpty: t -> bool
39 val layout: t -> Layout.t
40 val lookup: t * Domain.t -> Range.t
41 val map: t * (Range.t -> Range.t) -> t
42 val mapi: t * (Domain.t * Range.t -> Range.t) -> t
43 val multiExtend: t * Domain.t list * Range.t list -> t
44 val new: Domain.t list * (Domain.t -> Range.t) -> t
45 val plus: t list -> t
46 val remove: t * Domain.t -> t
47 val restrict: t * Domain.t list -> t
48 val single: Domain.t * Range.t -> t
49 val size: t -> int
50 end