on master help sign in
Fix #630, correctly determine type of as-patterns
commit11a96ef5961bbf458c3fd8de16e302beb783abfd authorEvan Czaplicki <info@elm-lang.org> dateFri 25 Jul 2014, 16:50 (12 years ago) parent1465e4d
1 file changed+5−4
compiler/Type/Constrain/Pattern.hs+5−4
compiler/Type/Constrain/Pattern.hs+5−4
@@ -24,7 +24,6 @@ constrain :: Environment -> P.CanonicalPattern -> Type
2424constrain env pattern tipe =
2525 let region = A.None (pretty pattern)
2626 t1 === t2 = A.A region (CEqual t1 t2)
27− x <? t = A.A region (CInstance x t)
2827 in
2928 case pattern of
3029 P.Anything -> return emptyFragment
@@ -42,10 +41,12 @@ constrain env pattern tipe =
4241 }
4342
4443 P.Alias name p -> do
44+ v <- liftIO $ variable Flexible
4545 fragment <- constrain env p tipe
46− return $ fragment {
47− typeEnv = Map.insert name tipe (typeEnv fragment),
48− typeConstraint = name <? tipe /\ typeConstraint fragment
46+ return $ fragment
47+ { typeEnv = Map.insert name (varN v) (typeEnv fragment)
48+ , vars = v : vars fragment
49+ , typeConstraint = varN v === tipe /\ typeConstraint fragment
4950 }
5051
5152 P.Data name patterns -> do