on master help sign in
Get patterns to type-check with the value in the case expression
commitd15d84deba93b69f2be24c4a8de6cd561155b965 authorEvan Czaplicki <info@elm-lang.org> dateMon 22 Jul 2013, 15:10 (13 years ago) parenteaa751d
1 file changed+2−1
compiler/Type/Constrain/Pattern.hs+2−1
compiler/Type/Constrain/Pattern.hs+2−1
@@ -42,6 +42,7 @@ constrain env pattern tipe =
4242
4343 PData name patterns -> do
4444 (kind, cvars, ctipe) <- freshDataScheme env name
45+ tipe' <- foldr (==>) tipe <$> mapM (\_ -> VarN <$> flexibleVar) [1..kind]
4546 let tvars = map VarN cvars
4647 msg = concat [ "Constructor '", name, "' expects ", show kind
4748 , " argument", if kind == 1 then "" else "s"
@@ -49,7 +50,7 @@ constrain env pattern tipe =
4950 if length patterns /= kind then error msg else do
5051 fragment <- Monad.liftM joinFragments (Monad.zipWithM (constrain env) patterns tvars)
5152 return $ fragment {
52− typeConstraint = typeConstraint fragment /\ tipe === ctipe,
53+ typeConstraint = typeConstraint fragment /\ tipe' === ctipe,
5354 vars = cvars ++ vars fragment
5455 }
5556