Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh |
2 | * Jagannathan, and Stephen Weeks. | |
3 | * | |
4 | * MLton is released under a BSD-style license. | |
5 | * See the file MLton-LICENSE for details. | |
6 | *) | |
7 | ||
8 | structure Option: OPTION = | |
9 | struct | |
10 | ||
11 | type 'a t = 'a option | |
12 | ||
13 | open Pervasive.Option | |
14 | ||
15 | fun fold (opt, b, f) = | |
16 | case opt of | |
17 | NONE => b | |
18 | | SOME x => f (x, b) | |
19 | ||
20 | fun exists (z, f) = | |
21 | case z of | |
22 | NONE => false | |
23 | | SOME x => f x | |
24 | ||
25 | fun forall (z, f) = | |
26 | case z of | |
27 | NONE => true | |
28 | | SOME x => f x | |
29 | ||
30 | fun foreach (opt, f) = | |
31 | case opt of | |
32 | NONE => () | |
33 | | SOME x => f x | |
34 | ||
35 | val app = foreach | |
36 | ||
37 | fun map (opt, f) = | |
38 | case opt of | |
39 | NONE => NONE | |
40 | | SOME x => SOME (f x) | |
41 | ||
42 | fun equals (o1, o2, eq) = | |
43 | case (o1, o2) of | |
44 | (NONE, NONE) => true | |
45 | | (SOME x, SOME y) => eq (x, y) | |
46 | | _ => false | |
47 | ||
48 | fun isNone opt = | |
49 | case opt of | |
50 | NONE => true | |
51 | | SOME _ => false | |
52 | ||
53 | fun toString xToString opt = | |
54 | case opt of | |
55 | NONE => "None" | |
56 | | SOME x => concat ["Some ", xToString x] | |
57 | ||
58 | fun layout layoutX opt = | |
59 | let | |
60 | open Layout | |
61 | in | |
62 | case opt of | |
63 | NONE => str "None" | |
64 | | SOME x => seq [str "Some ", layoutX x] | |
65 | end | |
66 | ||
67 | end |