summaryrefslogtreecommitdiff
path: root/src/Parser/Core.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-02-24 22:08:35 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2025-02-24 22:08:35 +0100
commitaa161777510728c94e51e9ef1d6df4146d7d952b (patch)
tree9f541ee6e2bd39c31ac55f9096b40a66e349a8af /src/Parser/Core.hs
parent3640256e80ba1aa1c1e022a231234dee814ace58 (diff)
Scalar unification for variables in expansion
Diffstat (limited to 'src/Parser/Core.hs')
-rw-r--r--src/Parser/Core.hs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/Parser/Core.hs b/src/Parser/Core.hs
index a0ba229..5fb2139 100644
--- a/src/Parser/Core.hs
+++ b/src/Parser/Core.hs
@@ -97,6 +97,15 @@ lookupVarExpr off sline name = do
ExprTypeVar tvar -> return $ SomeExpr $ DynVariable tvar sline fqn
ExprTypeFunction args (_ :: Proxy a) -> return $ SomeExpr $ (FunVariable args sline fqn :: Expr (FunctionType a))
+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)
+ 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))
+
unify :: Int -> SomeExprType -> SomeExprType -> TestParser SomeExprType
unify _ (ExprTypeVar aname) (ExprTypeVar bname) | aname == bname = do
cur <- gets testTypeUnif