summaryrefslogtreecommitdiff
path: root/src/elaborate.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-06-08 14:25:27 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-06-08 14:25:27 -0400
commit33cf695e0ba9586f05242b7d3595c94ed5c99b98 (patch)
tree2107ff15033d8138633b227ee9e6323c7346b788 /src/elaborate.sml
parent59cf4e73d9d6998ea4a83aa38c75c95ed462779f (diff)
Unification wildcards
Diffstat (limited to 'src/elaborate.sml')
-rw-r--r--src/elaborate.sml22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/elaborate.sml b/src/elaborate.sml
index 9e457499..9e63ecea 100644
--- a/src/elaborate.sml
+++ b/src/elaborate.sml
@@ -36,13 +36,6 @@ structure U = ElabUtil
open Print
open ElabPrint
-fun elabKind (k, loc) =
- case k of
- L.KType => (L'.KType, loc)
- | L.KArrow (k1, k2) => (L'.KArrow (elabKind k1, elabKind k2), loc)
- | L.KName => (L'.KName, loc)
- | L.KRecord k => (L'.KRecord (elabKind k), loc)
-
fun elabExplicitness e =
case e of
L.Explicit => L'.Explicit
@@ -183,6 +176,14 @@ fun cunif k =
end
+fun elabKind (k, loc) =
+ case k of
+ L.KType => (L'.KType, loc)
+ | L.KArrow (k1, k2) => (L'.KArrow (elabKind k1, elabKind k2), loc)
+ | L.KName => (L'.KName, loc)
+ | L.KRecord k => (L'.KRecord (elabKind k), loc)
+ | L.KWild => kunif ()
+
fun elabCon env (c, loc) =
case c of
L.CAnnot (c, k) =>
@@ -283,6 +284,13 @@ fun elabCon env (c, loc) =
((L'.CConcat (c1', c2'), loc), k)
end
+ | L.CWild k =>
+ let
+ val k' = elabKind k
+ in
+ (cunif k', k')
+ end
+
fun kunifsRemain k =
case k of
L'.KUnif (_, ref NONE) => true