| String String
| Character Char
| Bool Bool
- deriving Show
symbol :: Parser Char
symbol = oneOf "!#$%&|*+-/:<=>?@^_~"
readExpr :: String -> String
readExpr input = case parse parseExpr "lisp" input of
Left err -> "No match: " ++ show err
- Right val -> "Found value: " ++ show val
+ Right val -> "Found value: " ++ showVal val
+
+instance Show LispVal where show = showVal
+showVal :: LispVal -> String
+showVal (Atom atom) = atom
+showVal (List list) = "(" ++ unwordsList list ++ ")"
+showVal (DottedList head tail) = "(" ++ unwordsList head ++ " . " ++ showVal tail ++ ")"
+showVal (Number n) = show n
+showVal (String str) = "\"" ++ str ++ "\""
+showVal (Character c) = "'" ++ [c] ++ "'"
+showVal (Bool True) = "#t"
+showVal (Bool False) = "#f"
+
+unwordsList :: [LispVal] -> String
+unwordsList = unwords . map showVal
main :: IO ()
main = do