Update demos and adds <|

This commit is contained in:
2026-05-13 19:39:15 -05:00
parent 8f7684a1bb
commit e3dcf5edd7
14 changed files with 333 additions and 127 deletions

View File

@@ -45,6 +45,7 @@ tricuLexer = do
, closeParen
, openBracket
, closeBracket
, try arrowLeft
]
lexTricu :: String -> [LToken]
@@ -128,6 +129,9 @@ openBracket = char '[' $> LOpenBracket
closeBracket :: Lexer LToken
closeBracket = char ']' $> LCloseBracket
arrowLeft :: Lexer LToken
arrowLeft = string "<|" $> LArrowLeft
lnewline :: Lexer LToken
lnewline = char '\n' $> LNewline

View File

@@ -112,8 +112,8 @@ parseExpressionM = choice
, try parseLambdaM
, try parseLambdaExpressionM
, try parseListLiteralM
, try parseApplicationM
, try parseTreeTermM
, try parseArrowLeftM
, parseLiteralM
]
@@ -138,7 +138,7 @@ parseLambdaM = do
parseLambdaExpressionM :: ParserM TricuAST
parseLambdaExpressionM = choice
[ try parseLambdaApplicationM
[ try parseLambdaArrowLeftM
, parseAtomicLambdaM
]
@@ -172,6 +172,34 @@ parseLambdaApplicationM = do
pure arg
pure $ foldl SApp func args
parseArrowLeftM :: ParserM TricuAST
parseArrowLeftM = do
left <- parseApplicationM
mArrow <- optional (try $ do
scnParserM
satisfyM (== LArrowLeft))
case mArrow of
Nothing -> return left
Just _ -> do
skipMany (satisfyM (== LNewline))
scnParserM
right <- parseExpressionM
return $ SApp left right
parseLambdaArrowLeftM :: ParserM TricuAST
parseLambdaArrowLeftM = do
left <- parseLambdaApplicationM
mArrow <- optional (try $ do
scnParserM
satisfyM (== LArrowLeft))
case mArrow of
Nothing -> return left
Just _ -> do
skipMany (satisfyM (== LNewline))
scnParserM
right <- parseLambdaExpressionM
return $ SApp left right
parseAtomicBaseM :: ParserM TricuAST
parseAtomicBaseM = choice
[ parseTreeLeafM

View File

@@ -49,6 +49,7 @@ data LToken
| LCloseBracket
| LStringLiteral String
| LIntegerLiteral Int
| LArrowLeft
| LNewline
deriving (Eq, Show, Ord)