summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ziv Scully <ziv@mit.edu>2015-11-09 13:38:04 -0500
committerGravatar Ziv Scully <ziv@mit.edu>2015-11-09 13:38:04 -0500
commit91e5530ace053b1b9ea3a1fe64ce638ae6493314 (patch)
tree24b1ce27de7aef19039d006405bca9788c5ab38e
parentaa2c8c64542d7930773da26573e186ec3753c268 (diff)
Add new files missing from previous commit.
-rw-r--r--src/list_key_fn.sml14
-rw-r--r--src/pair_key_fn.sml12
2 files changed, 26 insertions, 0 deletions
diff --git a/src/list_key_fn.sml b/src/list_key_fn.sml
new file mode 100644
index 00000000..ec2bd26f
--- /dev/null
+++ b/src/list_key_fn.sml
@@ -0,0 +1,14 @@
+functor ListKeyFn(K : ORD_KEY)
+ : ORD_KEY where type ord_key = K.ord_key list = struct
+
+type ord_key = K.ord_key list
+
+val rec compare =
+ fn ([], []) => EQUAL
+ | ([], _) => LESS
+ | (_, []) => GREATER
+ | (x::xs, y::ys) => case K.compare (x, y) of
+ EQUAL => compare (xs, ys)
+ | ord => ord
+
+end
diff --git a/src/pair_key_fn.sml b/src/pair_key_fn.sml
new file mode 100644
index 00000000..cd33950d
--- /dev/null
+++ b/src/pair_key_fn.sml
@@ -0,0 +1,12 @@
+functor PairKeyFn (structure I : ORD_KEY
+ structure J : ORD_KEY)
+ : ORD_KEY where type ord_key = I.ord_key * J.ord_key = struct
+
+type ord_key = I.ord_key * J.ord_key
+
+fun compare ((i1, j1), (i2, j2)) =
+ case I.compare (i1, i2) of
+ EQUAL => J.compare (j1, j2)
+ | ord => ord
+
+end