Elm-0.12.2: compiler/Build/Print.hs
module Build.Print where
import System.IO (hPutStrLn, stderr)
import System.Exit (exitFailure)
import qualified Data.Map as Map
import qualified Data.List as List
import qualified SourceSyntax.Type as T
import qualified SourceSyntax.Module as M
import qualified SourceSyntax.PrettyPrint as Pretty
import qualified Type.Alias as Alias
import qualified Text.PrettyPrint as P
metaTypes :: Map.Map String M.ModuleInterface -> M.MetadataModule -> IO ()
metaTypes interfaces meta =
types interfaces (M.types meta) (M.aliases meta) (M.imports meta)
interfaceTypes :: Map.Map String M.ModuleInterface -> M.ModuleInterface -> IO ()
interfaceTypes interfaces iface =
types interfaces (M.iTypes iface) (M.iAliases iface) (M.iImports iface)
types :: Map.Map k M.ModuleInterface
-> Map.Map String T.Type
-> [M.Alias]
-> [(String, M.ImportMethod)]
-> IO ()
types interfaces types' aliases imports =
do putStrLn ""
mapM_ printType (Map.toList types')
putStrLn ""
where
rules = Alias.rules interfaces aliases imports
printType (n,t) = do
print $ P.hsep [ Pretty.variable n
, P.text ":"
, Pretty.pretty (Alias.realias rules t) ]
errors :: [P.Doc] -> IO ()
errors errs =
mapM_ print (List.intersperse (P.text " ") errs)
failure :: String -> IO a
failure msg =
do hPutStrLn stderr msg
exitFailure