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 = many1 digit >>= \ ds ->
41 parseExpr :: Parser LispVal
42 parseExpr = parseString
46 readExpr :: String -> String
47 readExpr input = case parse parseExpr "lisp" input of
48 Left err -> "No match: " ++ show err
49 Right val -> "Found value"
54 putStrLn (readExpr args)