3 import Text.ParserCombinators.Parsec hiding (spaces)
4 import System.Environment
6 data LispVal = Atom String
8 | DottedList [LispVal] LispVal
14 symbol = oneOf "!#$%&|*+-/:<=>?@^_~"
17 spaces = skipMany space
19 parseString :: Parser LispVal
22 x <- many (noneOf "\"")
26 parseAtom :: Parser LispVal
28 a <- letter <|> symbol
29 b <- many (letter <|> digit <|> symbol)
36 parseNumber :: Parser LispVal
37 parseNumber = liftM (Number . read) $ many1 digit
39 parseExpr :: Parser LispVal
40 parseExpr = parseString
44 readExpr :: String -> String
45 readExpr input = case parse parseExpr "lisp" input of
46 Left err -> "No match: " ++ show err
47 Right val -> "Found value"
52 putStrLn (readExpr args)