
Here is the error I am getting (I always get the first warning so that is nothing new): $ ghc -o Main.hs SimpleJSON.hs PrettyJSON.hs Prettify.hs compilation IS NOT required compilation IS NOT required /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning -F: directory name (/Users/me/Library/Frameworks) does not exist /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols: _ZCMain_main_closure ___stginit_ZCMain collect2: ld returned 1 exit status Here are my files: Main.hs ----- module Main () where import SimpleJSON import PrettyJSON import Prettify main = let s = JString "hello world" aDoc = renderJValue s in printPrettified aDoc SimpleJSON.hs -------- module SimpleJSON ( JValue(..) ) where data JValue = JNumber Double | JString String | JArray [JValue] | JObject [(String, JValue)] | JBool Bool | JNull deriving (Eq, Ord, Show) PrettyJSON.hs: ------- module PrettyJSON where import SimpleJSON import Prettify renderJValue :: JValue -> Doc renderJValue (JNumber f) = DNumber f renderJValue (JString s) = DText s renderJValue (JBool True) = DBool True renderJValue (JBool False) = DBool False renderJValue JNull = DNull Prettify.hs: ------ module Prettify where data Doc = DNumber Double | DText String | DBool Bool | DNull deriving (Show) getPrettyOutput :: Doc -> String getPrettyOutput (DNumber d) = "double: " ++ show d getPrettyOutput (DText s) = "string: " ++ show s getPrettyOutput (DBool True) = "bool: true" getPrettyOutput (DBool False) = "bool: false" getPrettyOutput DNull = "null" printPrettfied :: Doc -> IO () printPrettified aDoc = putStrLn (getPrettyOutput aDoc)