diff options
author | Adam Chlipala <adam@chlipala.net> | 2014-07-29 14:38:50 -0400 |
---|---|---|
committer | Adam Chlipala <adam@chlipala.net> | 2014-07-29 14:38:50 -0400 |
commit | 2d7238252d0cd1165f74aea511a03b9899ca105b (patch) | |
tree | 0f515910cf613eaa574e630658335249f3471e49 | |
parent | 11e4fd74efb535f8681b5be83c914bb2ca1bcc7f (diff) |
Small tweak to ordering of unification rules, to support better record matching
-rw-r--r-- | src/elaborate.sml | 10 | ||||
-rw-r--r-- | tests/empty_record.ur | 3 | ||||
-rw-r--r-- | tests/empty_record.urp | 2 |
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 |