From 3a6faf446c2e62add01c5d912a533f20e853ac77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 12 Apr 2026 11:39:29 +0200 Subject: Type constructors --- src/Parser/Core.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/Parser') diff --git a/src/Parser/Core.hs b/src/Parser/Core.hs index 562923d..1d93797 100644 --- a/src/Parser/Core.hs +++ b/src/Parser/Core.hs @@ -104,17 +104,27 @@ lookupVarExpr off sline name = do ( fqn, etype ) <- lookupVarType off name case etype of ExprTypePrim (Proxy :: Proxy a) -> return $ SomeExpr $ (Variable sline fqn :: Expr a) + ExprTypeConstr1 _ -> return $ SomeExpr $ (Undefined "incomplete type" :: Expr DynamicType) ExprTypeVar tvar -> return $ SomeExpr $ DynVariable tvar sline fqn ExprTypeFunction args (_ :: Proxy a) -> return $ SomeExpr $ (FunVariable args sline fqn :: Expr (FunctionType a)) + stype@ExprTypeApp {} -> do + tvar <- newTypeVar + modify $ \s -> s { testTypeUnif = M.insert tvar stype $ testTypeUnif s } + return $ SomeExpr $ DynVariable tvar sline fqn lookupScalarVarExpr :: Int -> SourceLine -> VarName -> TestParser SomeExpr lookupScalarVarExpr off sline name = do ( fqn, etype ) <- lookupVarType off name case etype of ExprTypePrim (Proxy :: Proxy a) -> return $ SomeExpr $ (Variable sline fqn :: Expr a) + ExprTypeConstr1 _ -> return $ SomeExpr $ (Undefined "incomplete type" :: Expr DynamicType) ExprTypeVar tvar -> return $ SomeExpr $ DynVariable tvar sline fqn ExprTypeFunction args (pa :: Proxy a) -> do SomeExpr <$> unifyExpr off pa (FunVariable args sline fqn :: Expr (FunctionType a)) + stype@ExprTypeApp {} -> do + tvar <- newTypeVar + modify $ \s -> s { testTypeUnif = M.insert tvar stype $ testTypeUnif s } + return $ SomeExpr $ DynVariable tvar sline fqn unify :: Int -> SomeExprType -> SomeExprType -> TestParser SomeExprType unify _ (ExprTypeVar aname) (ExprTypeVar bname) | aname == bname = do -- cgit v1.2.3