summaryrefslogtreecommitdiff
path: root/src/Parser.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2022-06-05 20:58:47 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2022-06-05 20:58:47 +0200
commit202fd8ba096ff5a80102cbec2922eef94061458b (patch)
tree5546acec206cffa4201c6e1d75634ece0347e32f /src/Parser.hs
parent7f9decf5ec9e4d9fbdfad23d7ce438c95bd8a862 (diff)
Refactor expressions as GADT
Diffstat (limited to 'src/Parser.hs')
-rw-r--r--src/Parser.hs28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/Parser.hs b/src/Parser.hs
index bf7f75b..6131a78 100644
--- a/src/Parser.hs
+++ b/src/Parser.hs
@@ -103,12 +103,12 @@ varExpansion = do
return $ VarName $ T.splitOn (T.singleton '.') (TL.toStrict name)
]
-quotedString :: TestParser StringExpr
+quotedString :: TestParser (Expr Text)
quotedString = label "string" $ lexeme $ do
symbol "\""
let inner = choice
[ char '"' >> return []
- , takeWhile1P Nothing (`notElem` "\"\\$") >>= \s -> (Left (TL.toStrict s):) <$> inner
+ , takeWhile1P Nothing (`notElem` "\"\\$") >>= \s -> (StringLit (TL.toStrict s):) <$> inner
,do void $ char '\\'
c <- choice
[ char '\\' >> return '\\'
@@ -118,29 +118,29 @@ quotedString = label "string" $ lexeme $ do
, char 'r' >> return '\r'
, char 't' >> return '\t'
]
- (Left (T.singleton c) :) <$> inner
+ (StringLit (T.singleton c) :) <$> inner
,do name <- varExpansion
- (Right name :) <$> inner
+ (StringVar name :) <$> inner
]
- StringExpr <$> inner
+ Concat <$> inner
-regex :: TestParser RegexExpr
+regex :: TestParser (Expr Regex)
regex = label "regular expression" $ lexeme $ do
symbol "/"
let inner = choice
[ char '/' >> return []
- , takeWhile1P Nothing (`notElem` "/\\$") >>= \s -> (Left (TL.unpack s) :) <$> inner
+ , takeWhile1P Nothing (`notElem` "/\\$") >>= \s -> (StringLit (TL.toStrict s) :) <$> inner
,do void $ char '\\'
s <- choice
- [ char '/' >> return (Left $ "/")
- , anySingle >>= \c -> return (Left ['\\', c])
+ [ char '/' >> return (StringLit $ T.singleton '/')
+ , anySingle >>= \c -> return (StringLit $ T.pack ['\\', c])
]
(s:) <$> inner
,do name <- varExpansion
- (Right name :) <$> inner
+ (StringVar name :) <$> inner
]
- expr <- RegexExpr <$> inner
- _ <- evalRegexExpr expr -- test regex parsing with empty variables
+ expr <- Regex <$> inner
+ _ <- eval expr -- test regex parsing with empty variables
return expr
@@ -200,7 +200,7 @@ testSpawn = command "spawn"
data SendBuilder = SendBuilder
{ _sendBuilderProc :: Maybe ProcName
- , _sendBuilderLine :: Maybe StringExpr
+ , _sendBuilderLine :: Maybe (Expr Text)
}
deriving (Generic)
@@ -217,7 +217,7 @@ testSend = command "send"
data ExpectBuilder = ExpectBuilder
{ _expectBuilderProc :: Maybe ProcName
- , _expectBuilderRegex :: Maybe RegexExpr
+ , _expectBuilderRegex :: Maybe (Expr Regex)
, _expectBuilderCaptures :: Maybe [VarName]
}
deriving (Generic)