+ 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