on b00a8cb help sign in
elk/compiler/Build/Print.hs
38 lines 1.2 kB history raw
1module Build.Print where
3import System.IO (hPutStrLn, stderr)
4import System.Exit (exitFailure)
6import qualified Data.Map as Map
7import qualified Data.List as List
8import qualified SourceSyntax.Module as M
9import qualified SourceSyntax.PrettyPrint as Pretty
10import qualified Type.Alias as Alias
11import qualified Text.PrettyPrint as P
13metaTypes :: Map.Map String M.ModuleInterface -> M.MetadataModule -> IO ()
14metaTypes interfaces meta =
15 types interfaces (M.types meta) (M.aliases meta) (M.imports meta)
17interfaceTypes :: Map.Map String M.ModuleInterface -> M.ModuleInterface -> IO ()
18interfaceTypes interfaces iface =
19 types interfaces (M.iTypes iface) (M.iAliases iface) (M.iImports iface)
21types interfaces types' aliases imports =
22 do putStrLn ""
23 mapM_ printType (Map.toList types')
24 putStrLn ""
25 where
26 rules = Alias.rules interfaces aliases imports
28 printType (n,t) = do
29 print $ P.hsep [ Pretty.variable n
30 , P.text ":"
31 , Pretty.pretty (Alias.realias rules t) ]
33errors :: [P.Doc] -> IO ()
34errors errs =
35 mapM_ print (List.intersperse (P.text " ") errs)
37failure :: String -> IO a
38failure msg = hPutStrLn stderr msg >> exitFailure