shithub: MicroHs

Download patch

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
--