X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FhsSyn%2FHsImpExp.lhs;h=5ee977726b809267be52a18670caf2a9506cd84e;hb=9cf0796366586e7cce895105f2715510ba88a4d4;hp=2e24797a5ed559c5af389706494915f513ba3baf;hpb=fda89b29c748c6cd2fe1fdb477d5c0e8f7d32b90;p=ghc-hetmet.git diff --git a/ghc/compiler/hsSyn/HsImpExp.lhs b/ghc/compiler/hsSyn/HsImpExp.lhs index 2e24797..5ee9777 100644 --- a/ghc/compiler/hsSyn/HsImpExp.lhs +++ b/ghc/compiler/hsSyn/HsImpExp.lhs @@ -1,22 +1,16 @@ % -% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996 +% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % \section[HsImpExp]{Abstract syntax: imports, exports, interfaces} \begin{code} -#include "HsVersions.h" - module HsImpExp where -IMP_Ubiq() +#include "HsVersions.h" -import BasicTypes ( IfaceFlavour(..) ) +import Module ( ModuleName, WhereFrom, pprModuleName ) import Outputable -import Pretty import SrcLoc ( SrcLoc ) -#if __GLASGOW_HASKELL__ >= 202 -import Name -#endif \end{code} %************************************************************************ @@ -28,36 +22,32 @@ import Name One per \tr{import} declaration in a module. \begin{code} data ImportDecl name - = ImportDecl Module -- module name + = ImportDecl ModuleName -- module name + WhereFrom Bool -- True => qualified - IfaceFlavour -- True => source imported module - -- (current interpretation: ignore ufolding info) - (Maybe Module) -- as Module + (Maybe ModuleName) -- as Module (Maybe (Bool, [IE name])) -- (True => hiding, names) SrcLoc \end{code} \begin{code} -instance (NamedThing name, Outputable name) => Outputable (ImportDecl name) where - ppr sty (ImportDecl mod qual as_source as spec _) - = hang (hsep [ptext SLIT("import"), pp_src as_source, - pp_qual qual, ptext mod, pp_as as]) +instance (Outputable name) => Outputable (ImportDecl name) where + ppr (ImportDecl mod from qual as spec _) + = hang (hsep [ptext SLIT("import"), ppr from, + pp_qual qual, pprModuleName mod, pp_as as]) 4 (pp_spec spec) where - pp_src HiFile = empty - pp_src HiBootFile = ptext SLIT("{-# SOURCE #-}") - pp_qual False = empty pp_qual True = ptext SLIT("qualified") pp_as Nothing = empty - pp_as (Just a) = (<>) (ptext SLIT("as ")) (ptext a) + pp_as (Just a) = ptext SLIT("as ") <+> pprModuleName a pp_spec Nothing = empty pp_spec (Just (False, spec)) - = parens (interpp'SP sty spec) + = parens (interpp'SP spec) pp_spec (Just (True, spec)) - = (<>) (ptext SLIT("hiding ")) (parens (interpp'SP sty spec)) + = ptext SLIT("hiding") <+> parens (interpp'SP spec) \end{code} %************************************************************************ @@ -72,7 +62,7 @@ data IE name | IEThingAbs name -- Class/Type (can't tell) | IEThingAll name -- Class/Type plus all methods/constructors | IEThingWith name [name] -- Class/Type plus some methods/constructors - | IEModuleContents Module -- (Export Only) + | IEModuleContents ModuleName -- (Export Only) \end{code} \begin{code} @@ -81,18 +71,23 @@ ieName (IEVar n) = n ieName (IEThingAbs n) = n ieName (IEThingWith n _) = n ieName (IEThingAll n) = n + +ieNames :: IE a -> [a] +ieNames (IEVar n ) = [n] +ieNames (IEThingAbs n ) = [n] +ieNames (IEThingAll n ) = [n] +ieNames (IEThingWith n ns) = n:ns +ieNames (IEModuleContents _ ) = [] \end{code} \begin{code} -instance (NamedThing name, Outputable name) => Outputable (IE name) where - ppr sty (IEVar var) = ppr sty var - ppr sty (IEThingAbs thing) = ppr sty thing - ppr sty (IEThingAll thing) - = hcat [ppr sty thing, text "(..)"] - ppr sty (IEThingWith thing withs) - = (<>) (ppr sty thing) - (parens (fsep (punctuate comma (map (ppr sty) withs)))) - ppr sty (IEModuleContents mod) - = (<>) (ptext SLIT("module ")) (ptext mod) +instance (Outputable name) => Outputable (IE name) where + ppr (IEVar var) = ppr var + ppr (IEThingAbs thing) = ppr thing + ppr (IEThingAll thing) = hcat [ppr thing, text "(..)"] + ppr (IEThingWith thing withs) + = ppr thing <> parens (fsep (punctuate comma (map ppr withs))) + ppr (IEModuleContents mod) + = ptext SLIT("module") <+> pprModuleName mod \end{code}