]> git.rmz.io Git - my-scheme.git/blobdiff - app/Main.hs
Use do to parse numbers
[my-scheme.git] / app / Main.hs
index 6fcf6675f175374d22b749097dc06142312b8400..87b94aa3650c31697794c5e2c6c17706d88219ef 100644 (file)
@@ -1,4 +1,5 @@
 module Main where
+import Control.Monad
 import Text.ParserCombinators.Parsec hiding (spaces)
 import System.Environment
 
@@ -32,8 +33,19 @@ parseAtom = do
                 "#f" -> Bool False
                 _    -> Atom atom
 
+parseNumber :: Parser LispVal
+parseNumber = do
+    ds <- many1 digit
+    let a = read ds
+    return $ Number a
+
+parseExpr :: Parser LispVal
+parseExpr = parseString
+        <|> parseAtom
+        <|> parseNumber
+
 readExpr :: String -> String
-readExpr input = case parse (spaces >> symbol) "lisp" input of
+readExpr input = case parse parseExpr "lisp" input of
     Left err -> "No match: " ++ show err
     Right val -> "Found value"