summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-09-29 20:40:05 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-09-29 20:44:54 +0200
commitc993c83b90a63dd7d6e6cabccaf5ea9c19b54786 (patch)
treeb0b6900113eb72a5ed228e5c9de680bfa9501528 /src
parent57c27f313e9f28548aec19e58b1497b79d7d5335 (diff)
Avoid using Expr Maybe when parsing shell pipelineHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/Parser/Shell.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs
index 22d47ed..9dbd4e8 100644
--- a/src/Parser/Shell.hs
+++ b/src/Parser/Shell.hs
@@ -84,14 +84,17 @@ parseCommand = label "shell statement" $ do
<*> args
<*> pure line
-parsePipeline :: Expr (Maybe ShellPipeline) -> TestParser (Expr ShellPipeline)
-parsePipeline upper = do
+parsePipeline :: Maybe (Expr ShellPipeline) -> TestParser (Expr ShellPipeline)
+parsePipeline mbupper = do
cmd <- parseCommand
- let pipeline = ShellPipeline <$> cmd <*> upper
+ let pipeline =
+ case mbupper of
+ Nothing -> fmap (\ecmd -> ShellPipeline ecmd Nothing) cmd
+ Just upper -> liftA2 (\ecmd eupper -> ShellPipeline ecmd (Just eupper)) cmd upper
choice
[ do
osymbol "|"
- parsePipeline (Just <$> pipeline)
+ parsePipeline (Just pipeline)
, do
return pipeline
@@ -100,7 +103,7 @@ parsePipeline upper = do
parseStatement :: TestParser (Expr [ ShellStatement ])
parseStatement = do
line <- getSourceLine
- fmap ((: []) . flip ShellStatement line) <$> parsePipeline (pure Nothing)
+ fmap ((: []) . flip ShellStatement line) <$> parsePipeline Nothing
shellScript :: TestParser (Expr ShellScript)
shellScript = do