1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 18:18:51 +03:00
mal/haskell/Printer.hs
2015-01-09 16:16:52 -06:00

37 lines
929 B
Haskell

module Printer
( _pr_str )
where
import qualified Data.Map as Map
import Types
_pr_list :: [MalVal] -> String
_pr_list = unwords . map _pr_str
_flatTuples ((a,b):xs) = MalString a : b : _flatTuples xs
_flatTuples _ = []
unescape chr = case chr of
'\n' -> "\\n"
'\\' -> "\\\\"
'"' -> "\\\""
c -> [c]
_pr_str :: MalVal -> String
_pr_str (MalString ('\x029e':str)) = ":" ++ str
_pr_str (MalString str) = "\"" ++ concatMap unescape str ++ "\""
_pr_str (MalSymbol name) = name
_pr_str (MalKeyword name) = ":" ++ name
_pr_str (MalNumber num) = show num
_pr_str (MalTrue) = "true"
_pr_str (MalFalse) = "false"
_pr_str (Nil) = "nil"
_pr_str (MalList items) = "(" ++ _pr_list items ++ ")"
_pr_str (MalVector items) = "[" ++ _pr_list items ++ "]"
_pr_str (MalHashMap m) = "{" ++ _pr_list (_flatTuples $ Map.assocs m) ++ "}"
_pr_str (MalFunc f) = "#<function>"
instance Show MalVal where show = _pr_str