@@ -97,15 +97,12 @@ constrain env (L _ _ expr) tipe =
97 ce <- constrain env e tipe
97 ce <- constrain env e tipe
98 return (cb /\ ce)
98 return (cb /\ ce)
100− Case e branches ->
100+ Case exp branches ->
101 exists $ \t -> do
101 exists $ \t -> do
102− ce <- constrain env e t
102+ ce <- constrain env exp t
103 let branch (p,e) = do
103 let branch (p,e) = do
104 fragment <- Pattern.constrain env p t
104 fragment <- Pattern.constrain env p t
105− c <- constrain env e tipe
105+ CLet [toScheme fragment] <$> constrain env e tipe
106− return $ ex (vars fragment)
107− (CLet [monoscheme (typeEnv fragment)]
108− (typeConstraint fragment /\ c))
109 CAnd . (:) ce <$> mapM branch branches
106 CAnd . (:) ce <$> mapM branch branches
111 Data name exprs ->
108 Data name exprs ->