diff options
-rw-r--r-- | src/elaborate.sml | 7 | ||||
-rw-r--r-- | tests/sig_impl.lac | 31 |
2 files changed, 33 insertions, 5 deletions
diff --git a/src/elaborate.sml b/src/elaborate.sml index e9d8d925..7d246fa0 100644 --- a/src/elaborate.sml +++ b/src/elaborate.sml @@ -563,11 +563,8 @@ and unifySummaries env (k, s1 : record_summary, s2 : record_summary) = end val (fs1, fs2) = eatMatching (fn ((x1, c1), (x2, c2)) => - if consEq env (x1, x2) then - (unifyCons env c1 c2; - true) - else - false) (#fields s1, #fields s2) + consEq env (c1, c2) andalso consEq env (x1, x2)) + (#fields s1, #fields s2) (*val () = eprefaces "Summaries2" [("#1", p_summary env {fields = fs1, unifs = #unifs s1, others = #others s1}), ("#2", p_summary env {fields = fs2, unifs = #unifs s2, others = #others s2})]*) val (unifs1, unifs2) = eatMatching (fn ((_, r1), (_, r2)) => r1 = r2) (#unifs s1, #unifs s2) diff --git a/tests/sig_impl.lac b/tests/sig_impl.lac index ccb57eb8..cdcd4ef7 100644 --- a/tests/sig_impl.lac +++ b/tests/sig_impl.lac @@ -25,3 +25,34 @@ end structure M : S = struct val x = fn v : int => {A = 0, B = "Hi"} end + +signature S = sig + con nm :: Name + con t :: Type + con r :: {Type} + val x : $([nm = t] ++ r) +end + +structure M : S = struct + val x = {A = 0, B = "Hi"} +end + +signature S = sig + con nm :: Name + con r :: {Type} + val x : $([nm = int] ++ r) +end + +structure M : S = struct + val x = {A = 0, B = "Hi"} +end + +signature S = sig + con nm :: Name + con r :: {Type} + val x : $([nm = string] ++ r) +end + +structure M : S = struct + val x = {A = 0, B = "Hi"} +end |