summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-09-11 18:36:20 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-09-11 18:36:20 -0400
commita1c9eb584060bb6fac219f53540324777a7fa5b4 (patch)
tree9264fb632b5dc5ede15206e8cddf7bc3d438fba4
parent42944f71120301ea2dff0e93f3a0f2e7df4a44b0 (diff)
Fix bug in subsignature check for con synonyms
-rw-r--r--src/elaborate.sml11
-rw-r--r--tests/crud.ur4
2 files changed, 12 insertions, 3 deletions
diff --git a/src/elaborate.sml b/src/elaborate.sml
index 8564b2dd..223c10e6 100644
--- a/src/elaborate.sml
+++ b/src/elaborate.sml
@@ -2478,7 +2478,16 @@ fun subSgn (env, denv) sgn1 (sgn2 as (_, loc2)) =
fun found (x', n1, k1, c1) =
if x = x' then
let
- fun good () = SOME (E.pushCNamedAs env x n2 k2 (SOME c2), denv)
+ fun good () =
+ let
+ val env = E.pushCNamedAs env x n2 k2 (SOME c2)
+ val env = if n1 = n2 then
+ env
+ else
+ E.pushCNamedAs env x n1 k1 (SOME c1)
+ in
+ SOME (env, denv)
+ end
in
(case unifyCons (env, denv) c1 c2 of
[] => good ()
diff --git a/tests/crud.ur b/tests/crud.ur
index 6bbcbe1f..c3e76e6a 100644
--- a/tests/crud.ur
+++ b/tests/crud.ur
@@ -7,7 +7,7 @@ functor Make(M : sig
val title : string
- val cols : $(Top.mapTT (fn t => {Show : t -> xbody}) cols)
+ val cols : colMeta cols
end) = struct
open constraints M
@@ -22,7 +22,7 @@ fun list () =
{fold [fn cols :: {Type} => $cols -> colMeta cols -> xtr]
(fn (nm :: Name) (t :: Type) (rest :: {Type}) acc =>
[[nm] ~ rest] =>
- fn (r : $([nm = t] ++ rest)) cols =>
+ fn r cols =>
<tr>
<td>{cols.nm.Show r.nm}</td>
{acc (r -- nm) (cols -- nm)}