diff options
| author | Joel Martin <github@martintribe.org> | 2014-12-24 21:51:23 -0700 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2015-01-09 16:16:53 -0600 |
| commit | c150ec41f4f0b8f384f4b1b493a5ca61db42573c (patch) | |
| tree | 8cac11285240725efa7e093a54ef9573dcb2aa44 /haskell/Printer.hs | |
| parent | 2988d38e84bce8531c0f21fafecb7483593cda73 (diff) | |
| download | mal-c150ec41f4f0b8f384f4b1b493a5ca61db42573c.tar.gz mal-c150ec41f4f0b8f384f4b1b493a5ca61db42573c.zip | |
Haskell: Add steps9-A, metadata, and atoms.
Some refactoring of Core.hs to make better use of pattern matching.
Only remaining thing is exception handling (generic try/throw).
Diffstat (limited to 'haskell/Printer.hs')
| -rw-r--r-- | haskell/Printer.hs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/haskell/Printer.hs b/haskell/Printer.hs index 1cc2a97..e24695f 100644 --- a/haskell/Printer.hs +++ b/haskell/Printer.hs @@ -3,6 +3,8 @@ module Printer where import qualified Data.Map as Map +import Data.IORef (readIORef) +import System.IO.Unsafe (unsafePerformIO) import Types @@ -30,15 +32,15 @@ _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 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 pr (MalAtom r _) = "(atom " ++ (_pr_str pr (unsafePerformIO (readIORef r))) ++ ")" +_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 |
