aboutsummaryrefslogtreecommitdiff
path: root/haskell/Printer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'haskell/Printer.hs')
-rw-r--r--haskell/Printer.hs45
1 files changed, 27 insertions, 18 deletions
diff --git a/haskell/Printer.hs b/haskell/Printer.hs
index 94bc5ed..1cc2a97 100644
--- a/haskell/Printer.hs
+++ b/haskell/Printer.hs
@@ -1,13 +1,20 @@
module Printer
-( _pr_str )
+( _pr_str, _pr_list )
where
import qualified Data.Map as Map
import Types
-_pr_list :: [MalVal] -> String
-_pr_list = unwords . map _pr_str
+--concat (map (++ delim) list)
+--join [] delim = []
+--join (x:xs) delim = x ++ delim ++ join xs delim
+
+
+_pr_list :: Bool -> String -> [MalVal] -> String
+_pr_list pr sep [] = []
+_pr_list pr sep (x:[]) = (_pr_str pr x)
+_pr_list pr sep (x:xs) = (_pr_str pr x) ++ sep ++ (_pr_list pr sep xs)
_flatTuples ((a,b):xs) = MalString a : b : _flatTuples xs
_flatTuples _ = []
@@ -18,19 +25,21 @@ unescape chr = case chr of
'"' -> "\\\""
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
+_pr_str :: Bool -> MalVal -> String
+_pr_str _ (MalString ('\x029e':str)) = ":" ++ str
+_pr_str True (MalString str) = "\"" ++ concatMap unescape str ++ "\""
+_pr_str False (MalString str) = 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 pr (MalList items) = "(" ++ (_pr_list pr " " items) ++ ")"
+_pr_str pr (MalVector items) = "[" ++ (_pr_list pr " " items) ++ "]"
+_pr_str pr (MalHashMap m) = "{" ++ (_pr_list pr " " (_flatTuples $ Map.assocs m)) ++ "}"
+_pr_str _ (Func f) = "#<function>"
+_pr_str _ (MalFunc {ast=ast, env=fn_env, params=params}) = "(fn* " ++ (show params) ++ " " ++ (show ast) ++ ")"
+
+instance Show MalVal where show = _pr_str True