From c150ec41f4f0b8f384f4b1b493a5ca61db42573c Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Wed, 24 Dec 2014 21:51:23 -0700 Subject: 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). --- haskell/Printer.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'haskell/Printer.hs') 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) = "#" +_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 _) = "#" _pr_str _ (MalFunc {ast=ast, env=fn_env, params=params}) = "(fn* " ++ (show params) ++ " " ++ (show ast) ++ ")" instance Show MalVal where show = _pr_str True -- cgit v1.2.3