|
|
|
@ -23,21 +23,19 @@ parseExpr = parseLambda
|
|
|
|
|
<|> parseString
|
|
|
|
|
|
|
|
|
|
parseNumber :: Parser Expr
|
|
|
|
|
parseNumber = (Fix . Num . fromMaybe 0 . readMaybe) <$> many1 digit
|
|
|
|
|
parseNumber = Fix . Num . fromMaybe 0 . readMaybe <$> many1 digit
|
|
|
|
|
|
|
|
|
|
parseAtom :: Parser Expr
|
|
|
|
|
parseAtom = do
|
|
|
|
|
frst <- noneOf " \t()[]\""
|
|
|
|
|
rest <- many (noneOf " \t()[]")
|
|
|
|
|
frst <- noneOf " \t\n()[]{}\""
|
|
|
|
|
rest <- many (noneOf " \t\n()[]{}")
|
|
|
|
|
case frst:rest of
|
|
|
|
|
"true" -> return . Fix $ Bool True
|
|
|
|
|
"false" -> return . Fix $ Bool False
|
|
|
|
|
x -> return . Fix $ Atom (toS x)
|
|
|
|
|
|
|
|
|
|
parseString :: Parser Expr
|
|
|
|
|
parseString = (Fix . Str . toS) <$> between (char '"')
|
|
|
|
|
(char '"')
|
|
|
|
|
(many (noneOf "\""))
|
|
|
|
|
parseString = Fix . Str . toS <$> between (char '"') (char '"') (many (noneOf "\""))
|
|
|
|
|
|
|
|
|
|
parseExprs :: Parser [Expr]
|
|
|
|
|
parseExprs = sepEndBy parseExpr spaces
|
|
|
|
|