From a1307b74035e5a11d475f3bc27af3f2cbeaaa570 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Mon, 27 Feb 2017 08:36:14 +0100 Subject: [PATCH] fix bool parser --- src/Lish/Parser.hs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Lish/Parser.hs b/src/Lish/Parser.hs index a3554eb..65f291e 100644 --- a/src/Lish/Parser.hs +++ b/src/Lish/Parser.hs @@ -17,7 +17,6 @@ parseCmd = parse parseExpr "S-Expr" parseExpr :: Parser SExp parseExpr = parseLambda <|> parseList - <|> parseBool <|> parseNumber <|> parseAtom <|> parseString @@ -25,14 +24,14 @@ parseExpr = parseLambda parseNumber :: Parser SExp parseNumber = (Num . fromMaybe 0 . readMaybe) <$> many1 digit -parseBool :: Parser SExp -parseBool = Bool <$> ((string "true" >> return True) - <|> (string "false" >> return False)) - parseAtom :: Parser SExp -parseAtom = Atom <$> do frst <- (noneOf " \t()[]\"") - rest <- many (noneOf " \t()[]") - return $ toS (frst:rest) +parseAtom = do + frst <- (noneOf " \t()[]\"") + rest <- many (noneOf " \t()[]") + case frst:rest of + "true" -> return (Bool True) + "false" -> return (Bool False) + x -> return (Atom (toS x)) parseString :: Parser SExp parseString = (Str . toS) <$> between (char '"')