ref: 961c1a4f7d14dde651f4001aaa29a58cbe266e62
parent: d2c046ecc0540cbc17f4839e9f88d20709f6afe5
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Aug 20 12:18:23 EDT 2023
Check pattern constructor arity.
--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -818,7 +818,13 @@
env <- T.mapM (\ v -> (pair v . ETypeScheme []) <$> newUVar) $ filter (not . isUnderscore) $ patVars ap
withExtVals env $ T.do
(pp, _) <- tcExpr mt ap
+ () <- checkArity 0 pp
ta pp
+
+checkArity :: Int -> EPat -> T ()
+checkArity n (EApp f _) = checkArity (n+1) f
+checkArity n (ECon c) = if n == conArity c then T.return () else error "con arity"
+checkArity _ _ = T.return ()
-- XXX No mutual recursion yet
tcBinds :: forall a . [EBind] -> ([EBind] -> T a) -> T a
--
⑨