From eaa04c4a592c6faff5fc3d1e7adf35219b115dd7 Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Wed, 10 Jan 2024 16:12:35 -0700 Subject: [PATCH] its fine --- src/Rlp/Parse/Decls.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Rlp/Parse/Decls.hs b/src/Rlp/Parse/Decls.hs index d61c0d4..fb6d875 100644 --- a/src/Rlp/Parse/Decls.hs +++ b/src/Rlp/Parse/Decls.hs @@ -128,18 +128,26 @@ standaloneOf = (<* eof) partialExpr :: (OnFold) => Parser PartialExpr' partialExpr = choice - [ try $ Fix <$> infixExpr + [ ifExpr + , try $ infixExpr , application ] "expression" where application = foldl1' mkApp <$> some (flexeme partialExpr1) - infixExpr = mkB <$> partialExpr1' <*> infixOp' <*> partialExpr' + infixExpr = fmap Fix $ + mkB <$> partialExpr1' <*> infixOp' <*> partialExpr' + + ifExpr :: Parser PartialExpr' + ifExpr = fmap (Fix . E) $ + IfEF <$> (flexeme "if" *> partialExpr) + <*> (flexeme "then" *> partialExpr) + <*> (flexeme "else" *> partialExpr) mkB a f b = B f a b partialExpr1' = unFix <$> partialExpr1 partialExpr' = unFix <$> partialExpr - infixOp' = lexeme infixOp + infixOp' = flexeme infixOp mkApp :: PartialExpr' -> PartialExpr' -> PartialExpr' mkApp f x = Fix . E $ f `AppEF` x