on e123780 help sign in
elk/compiler/Build/Print.hs
46 lines 1.4 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.Type as T
9import qualified SourceSyntax.Module as M
10import qualified SourceSyntax.PrettyPrint as Pretty
11import qualified Type.Alias as Alias
12import qualified Text.PrettyPrint as P
14metaTypes :: Map.Map String M.ModuleInterface -> M.MetadataModule -> IO ()
15metaTypes interfaces meta =
16 types interfaces (M.types meta) (M.aliases meta) (M.imports meta)
18interfaceTypes :: Map.Map String M.ModuleInterface -> M.ModuleInterface -> IO ()
19interfaceTypes interfaces iface =
20 types interfaces (M.iTypes iface) (M.iAliases iface) (M.iImports iface)
22types :: Map.Map k M.ModuleInterface
23 -> Map.Map String T.Type
24 -> [M.Alias]
25 -> [(String, M.ImportMethod)]
26 -> IO ()
27types interfaces types' aliases imports =
28 do putStrLn ""
29 mapM_ printType (Map.toList types')
30 putStrLn ""
31 where
32 rules = Alias.rules interfaces aliases imports
34 printType (n,t) = do
35 print $ P.hsep [ Pretty.variable n
36 , P.text ":"
37 , Pretty.pretty (Alias.realias rules t) ]
39errors :: [P.Doc] -> IO ()
40errors errs =
41 mapM_ print (List.intersperse (P.text " ") errs)
43failure :: String -> IO a
44failure msg =
45 do hPutStrLn stderr msg
46 exitFailure