summaryrefslogtreecommitdiff
path: root/src/Parser
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-08-27 20:34:57 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-08-27 23:04:38 +0200
commit0cbbe31c5f16df73dcc3a73b37cac4a72948f3a6 (patch)
treef607a68d575ac670b9a637a967eabbe56f9257aa /src/Parser
parentd8420a37ffe9e752816b071fced4a972ca1fad23 (diff)
Accept various builtin types in type expressions
Diffstat (limited to 'src/Parser')
-rw-r--r--src/Parser/Core.hs10
-rw-r--r--src/Parser/Expr.hs8
2 files changed, 11 insertions, 7 deletions
diff --git a/src/Parser/Core.hs b/src/Parser/Core.hs
index 37c6f12..c982319 100644
--- a/src/Parser/Core.hs
+++ b/src/Parser/Core.hs
@@ -95,6 +95,7 @@ data Toplevel
data TestParserState = TestParserState
{ testSourcePath :: FilePath
, testVars :: [ ( VarName, ( FqVarName, SomeExprType )) ]
+ , testTypeVars :: [ ( VarName, SomeExprType ) ]
, testContext :: SomeExpr
, testNextTypeVar :: Int
, testTypeUnif :: Map TypeVar SomeExprType
@@ -141,6 +142,15 @@ lookupScalarVarExpr off sline name = do
SomeExpr <$> unifyExpr off pa (FunVariable args sline fqn :: Expr (FunctionType a))
stype -> return $ SomeExpr $ DynVariable stype sline fqn
+lookupType :: Int -> VarName -> TestParser SomeExprType
+lookupType off name = do
+ gets (lookup name . testTypeVars) >>= \case
+ Nothing -> do
+ registerParseError $ FancyError off $ S.singleton $ ErrorFail $ T.unpack $
+ "type not in scope: ‘" <> textVarName name <> "’"
+ return $ ExprTypeVar (TypeVar $ textVarName name)
+ Just x -> return x
+
resolveKnownTypeVars :: SomeExprType -> TestParser ( SomeExprType, [ TypeVar ] )
resolveKnownTypeVars = fmap (fmap (uniq . sort)) . runWriterT . go
diff --git a/src/Parser/Expr.hs b/src/Parser/Expr.hs
index ec5e2b4..4603dda 100644
--- a/src/Parser/Expr.hs
+++ b/src/Parser/Expr.hs
@@ -561,10 +561,4 @@ typeExpr :: TestParser SomeExprType
typeExpr = do
off <- stateOffset <$> getParserState
name <- constrName <?> "type constructor name"
-
- case textVarName name of
- "String" -> return $ ExprTypePrim @Text Proxy
- _ -> do
- registerParseError $ FancyError off $ S.singleton $ ErrorFail $ T.unpack $
- "type constructor not in scope: ‘" <> textVarName name <> "’"
- ExprTypeVar <$> newTypeVar
+ lookupType off name