diff options
Diffstat (limited to 'src/Parser')
-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 |