summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-07-29 14:38:50 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2014-07-29 14:38:50 -0400
commit2d7238252d0cd1165f74aea511a03b9899ca105b (patch)
tree0f515910cf613eaa574e630658335249f3471e49
parent11e4fd74efb535f8681b5be83c914bb2ca1bcc7f (diff)
Small tweak to ordering of unification rules, to support better record matching
-rw-r--r--src/elaborate.sml10
-rw-r--r--tests/empty_record.ur3
-rw-r--r--tests/empty_record.urp2
3 files changed, 10 insertions, 5 deletions
diff --git a/src/elaborate.sml b/src/elaborate.sml
index d492883f..5029ef4d 100644
--- a/src/elaborate.sml
+++ b/src/elaborate.sml
@@ -1220,6 +1220,11 @@
else
err (fn _ => TooLifty (loc1, loc2))
+ | (L'.CRecord _, _) => isRecord ()
+ | (_, L'.CRecord _) => isRecord ()
+ | (L'.CConcat _, _) => isRecord ()
+ | (_, L'.CConcat _) => isRecord ()
+
| (L'.CUnif (0, _, _, _, r as ref (L'.Unknown f)), _) =>
if occursCon r c2All then
err COccursCheckFailed
@@ -1262,11 +1267,6 @@
end
handle CantSquish => err (fn _ => TooDeep))
- | (L'.CRecord _, _) => isRecord ()
- | (_, L'.CRecord _) => isRecord ()
- | (L'.CConcat _, _) => isRecord ()
- | (_, L'.CConcat _) => isRecord ()
-
| (L'.CUnit, L'.CUnit) => ()
diff --git a/tests/empty_record.ur b/tests/empty_record.ur
new file mode 100644
index 00000000..45ab6fdb
--- /dev/null
+++ b/tests/empty_record.ur
@@ -0,0 +1,3 @@
+val concatX [ctx ::: {Unit}] [use ::: {Type}]
+ : list (xml ctx use []) -> xml ctx use []
+ = List.foldl join <xml/>
diff --git a/tests/empty_record.urp b/tests/empty_record.urp
new file mode 100644
index 00000000..c81175fc
--- /dev/null
+++ b/tests/empty_record.urp
@@ -0,0 +1,2 @@
+$/list
+empty_record