From d62b7747b2d4f172afe9c2bb537b825734f805de Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Tue, 1 Jul 2014 03:27:13 -0500 Subject: [PATCH] default.nix is parsing again, but not all-packages.nix --- Nix/Parser.hs | 48 ++++++++++++++++--------------------------- Nix/Parser/Library.hs | 4 ++-- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/Nix/Parser.hs b/Nix/Parser.hs index 9f63829..6c5c247 100644 --- a/Nix/Parser.hs +++ b/Nix/Parser.hs @@ -18,7 +18,7 @@ import Prelude hiding (elem) nixApp :: Parser NExpr nixApp = go <$> someTill (whiteSpace *> nixExpr True) - (try (lookAhead (char ';'))) + (try (lookAhead (() <$ oneOf "=,;])}" <|> eof))) where go [] = error "some has failed us" go [x] = x @@ -44,34 +44,32 @@ nixExpr = buildExpressionParser table . nixTerm -- Postfix (pure (Fix . NOper . fun) <* symbol name) nixTerm :: Bool -> Parser NExpr -nixTerm allowLambdas = trace "in nixTerm" (return ()) >> choice +nixTerm allowLambdas = choice [ nixInt , nixBool , nixNull , nixParens , nixList , nixPath - , maybeSetOrLambda allowLambdas + , setLambdaStringOrSym allowLambdas ] nixInt :: Parser NExpr nixInt = mkInt <$> decimal "integer" nixBool :: Parser NExpr -nixBool = (string "true" *> pure (mkBool True)) - <|> (string "false" *> pure (mkBool False)) +nixBool = (try (string "true") *> pure (mkBool True)) + <|> (try (string "false") *> pure (mkBool False)) "bool" nixNull :: Parser NExpr -nixNull = string "null" *> pure mkNull "null" +nixNull = try (string "null") *> pure mkNull "null" nixParens :: Parser NExpr nixParens = parens nixApp "parens" nixList :: Parser NExpr -nixList = do - trace "in nixList" $ return () - brackets (Fix . NList <$> many (nixTerm False)) "list" +nixList = brackets (Fix . NList <$> many (trace "in nixList" $ nixTerm False)) "list" nixPath :: Parser NExpr nixPath = try $ do @@ -82,9 +80,9 @@ nixPath = try $ do where isPathChar c = isAlpha c || c `Prelude.elem` ".:/" -maybeSetOrLambda :: Bool -> Parser NExpr -maybeSetOrLambda allowLambdas = do - trace "maybeSetOrLambda" $ return () +setLambdaStringOrSym :: Bool -> Parser NExpr +setLambdaStringOrSym allowLambdas = do + trace "setLambdaStringOrSym" $ return () x <- try (lookAhead symName) <|> try (lookAhead (singleton <$> char '{')) <|> return "" @@ -92,8 +90,7 @@ maybeSetOrLambda allowLambdas = do then setOrArgs else do trace "might still have a lambda" $ return () - y <- try (lookAhead (symName *> whiteSpace *> symbolic ':' - *> return True)) + y <- try (lookAhead (True <$ (symName *> whiteSpace *> symbolic ':'))) <|> return False trace ("results are = " ++ show y) $ return () if y @@ -124,25 +121,16 @@ stringish oneChar = mkStr . singleton <$> anyChar argExpr :: Parser NExpr -argExpr = do - trace "in argExpr" $ return () - (Fix . NArgSet . Map.fromList <$> argList) - <|> ((mkSym <$> symName) "argname") +argExpr = (Fix . NArgSet . Map.fromList <$> argList) + <|> ((mkSym <$> symName) "argname") where - argList = do - trace "in argList" $ return () - braces ((argName <* trace "FOO" whiteSpace) `sepBy` trace "BAR" (symbolic ',')) - "arglist" - - argName = do - trace "in argName" $ return () - (,) <$> (symName <* whiteSpace) - <*> optional (symbolic '?' *> nixExpr False) + argList = braces ((argName <* whiteSpace) `sepBy` symbolic ',') + "arglist" + argName = (,) <$> (symName <* whiteSpace) + <*> optional (symbolic '?' *> nixExpr False) nvPair :: Parser (NExpr, NExpr) -nvPair = do - trace "in nvPair" $ return () - (,) <$> keyName <*> (symbolic '=' *> nixApp) +nvPair = (,) <$> keyName <*> (symbolic '=' *> nixApp) keyName :: Parser NExpr keyName = (stringish <|> (mkSym <$> symName)) <* whiteSpace diff --git a/Nix/Parser/Library.hs b/Nix/Parser/Library.hs index b68cfcd..e90881e 100644 --- a/Nix/Parser/Library.hs +++ b/Nix/Parser/Library.hs @@ -69,7 +69,7 @@ import Text.Trifecta as X #endif someTill :: Parser a -> Parser end -> Parser [a] -someTill p end = go *> scan +someTill p end = go where - go = do { x <- p; xs <- scan; return (x:xs) } + go = (:) <$> p <*> scan scan = (end *> return []) <|> go