summaryrefslogtreecommitdiff
path: root/src/core_util.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 15:03:05 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-08-16 15:03:05 -0400
commit6cac02596e21666de5658f83957d3fa7d7b60a8c (patch)
treeba8d7f45822b7cba62fe659ce25ea3504475ef73 /src/core_util.sml
parente9456cb231725d65a9cdd11dc3d4549fe7254e06 (diff)
Corifying con-tuples
Diffstat (limited to 'src/core_util.sml')
-rw-r--r--src/core_util.sml28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/core_util.sml b/src/core_util.sml
index f79e6d20..3403a9d1 100644
--- a/src/core_util.sml
+++ b/src/core_util.sml
@@ -54,6 +54,10 @@ fun compare ((k1, _), (k2, _)) =
| (_, KRecord _) => GREATER
| (KUnit, KUnit) => EQUAL
+ | (KUnit, _) => LESS
+ | (_, KUnit) => GREATER
+
+ | (KTuple ks1, KTuple ks2) => joinL compare (ks1, ks2)
fun mapfold f =
let
@@ -79,6 +83,11 @@ fun mapfold f =
(KRecord k', loc))
| KUnit => S.return2 kAll
+
+ | KTuple ks =>
+ S.map2 (ListUtil.mapfold mfk ks,
+ fn ks' =>
+ (KTuple ks', loc))
in
mfk
end
@@ -170,6 +179,15 @@ fun compare ((c1, _), (c2, _)) =
| (_, CFold _) => GREATER
| (CUnit, CUnit) => EQUAL
+ | (CUnit, _) => LESS
+ | (_, CUnit) => GREATER
+
+ | (CTuple cs1, CTuple cs2) => joinL compare (cs1, cs2)
+ | (CTuple _, _) => LESS
+ | (_, CTuple _) => GREATER
+
+ | (CProj (c1, n1), CProj (c2, n2)) => join (Int.compare (n1, n2),
+ fn () => compare (c1, c2))
datatype binder =
Rel of string * kind
@@ -245,6 +263,16 @@ fun mapfoldB {kind = fk, con = fc, bind} =
(CFold (k1', k2'), loc)))
| CUnit => S.return2 cAll
+
+ | CTuple cs =>
+ S.map2 (ListUtil.mapfold (mfc ctx) cs,
+ fn cs' =>
+ (CTuple cs', loc))
+
+ | CProj (c, n) =>
+ S.map2 (mfc ctx c,
+ fn c' =>
+ (CProj (c', n), loc))
in
mfc
end