on master help sign in
Properly quantify variables in Data expressions.
commita736a28a431e54d38630ab4ff32e47859d7b1757 authorEvan Czaplicki <info@elm-lang.org> dateMon 12 Aug 2013, 01:09 (13 years ago) parent585107e
1 file changed+3−5
compiler/Type/Constrain/Expression.hs+3−5
compiler/Type/Constrain/Expression.hs+3−5
@@ -86,13 +86,11 @@ constrain env (L span expr) tipe =
8686 and . (:) ce <$> mapM branch branches
8787
8888 Data name exprs ->
89− do pairs <- mapM pair exprs
89+ do vars <- forM exprs $ \_ -> var Flexible
90+ let pairs = zip exprs (map VarN vars)
9091 (ctipe, cs) <- Monad.foldM step (tipe,true) (reverse pairs)
91− return (cs /\ name <? ctipe)
92+ return $ ex vars (cs /\ name <? ctipe)
9293 where
93− pair e = do v <- var Flexible -- needs an ex
94− return (e, VarN v)
95−
9694 step (t,c) (e,x) = do
9795 c' <- constrain env e x
9896 return (x ==> t, c /\ c')