diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-09-29 20:40:05 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-09-29 20:44:54 +0200 |
commit | c993c83b90a63dd7d6e6cabccaf5ea9c19b54786 (patch) | |
tree | b0b6900113eb72a5ed228e5c9de680bfa9501528 /src/Parser/Shell.hs | |
parent | 57c27f313e9f28548aec19e58b1497b79d7d5335 (diff) |
Diffstat (limited to 'src/Parser/Shell.hs')
-rw-r--r-- | src/Parser/Shell.hs | 13 |
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 |