@@ -86,13 +86,11 @@ constrain env (L span expr) tipe =
86 and . (:) ce <$> mapM branch branches
86 and . (:) ce <$> mapM branch branches
88 Data name exprs ->
88 Data name exprs ->
89− do pairs <- mapM pair exprs
89+ do vars <- forM exprs $ \_ -> var Flexible
90+ let pairs = zip exprs (map VarN vars)
90 (ctipe, cs) <- Monad.foldM step (tipe,true) (reverse pairs)
91 (ctipe, cs) <- Monad.foldM step (tipe,true) (reverse pairs)
91− return (cs /\ name <? ctipe)
92+ return $ ex vars (cs /\ name <? ctipe)
93− pair e = do v <- var Flexible -- needs an ex
96 step (t,c) (e,x) = do
94 step (t,c) (e,x) = do
97 c' <- constrain env e x
95 c' <- constrain env e x
98 return (x ==> t, c /\ c')
96 return (x ==> t, c /\ c')