Import Upstream version 20180207
[hcoop/debian/mlton.git] / mlton / atoms / admits-equality.fun
CommitLineData
7f918cf1
CE
1(* Copyright (C) 2003-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
8functor AdmitsEquality (S: ADMITS_EQUALITY_STRUCTS): ADMITS_EQUALITY =
9struct
10
11open S
12
13datatype t = Always | Never | Sometimes
14
15val toString =
16 fn Always => "Always"
17 | Never => "Never"
18 | Sometimes => "Sometimes"
19
20val layout = Layout.str o toString
21
22val op <= =
23 fn (Never, _) => true
24 | (Sometimes, Never) => false
25 | (Sometimes, _) => true
26 | (Always, Always) => true
27 | (Always, _) => false
28
29val op <= =
30 Trace.trace2 ("AdmitsEquality.<=", layout, layout, Bool.layout) (op <=)
31
32val or =
33 fn (Always, _) => Always
34 | (_, Always) => Always
35 | (Sometimes, _) => Sometimes
36 | (_, Sometimes) => Sometimes
37 | _ => Never
38
39end