X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FhsSyn%2FHsImpExp.lhs;h=e483914619369de1da630a0b3daddae08dcff8ab;hb=21a542ddc3d02e0d3a8be28e0aa00796970adb9e;hp=031bf93a3f2872533008cdd0fee984d155100ae6;hpb=f9120c200bcf613b58d742802172fb4c08171f0d;p=ghc-hetmet.git diff --git a/ghc/compiler/hsSyn/HsImpExp.lhs b/ghc/compiler/hsSyn/HsImpExp.lhs index 031bf93..e483914 100644 --- a/ghc/compiler/hsSyn/HsImpExp.lhs +++ b/ghc/compiler/hsSyn/HsImpExp.lhs @@ -1,18 +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 -import Ubiq +#include "HsVersions.h" +import Name ( isLexSym ) +import Module ( ModuleName, WhereFrom ) import Outputable -import PprStyle ( PprStyle(..) ) -import Pretty import SrcLoc ( SrcLoc ) \end{code} @@ -25,31 +23,34 @@ import SrcLoc ( SrcLoc ) One per \tr{import} declaration in a module. \begin{code} data ImportDecl name - = ImportDecl Module -- module name - Bool -- qualified? - (Maybe Module) -- as Module - (Maybe (Bool, [IE name])) -- (hiding?, names) + = ImportDecl ModuleName -- module name + WhereFrom + Bool -- True => qualified + (Maybe ModuleName) -- as Module + (Maybe (Bool, [IE name])) -- (True => hiding, names) SrcLoc \end{code} \begin{code} instance (Outputable name) => Outputable (ImportDecl name) where - ppr sty (ImportDecl mod qual as spec _) - = ppHang (ppCat [ppStr "import", pp_qual qual, ppPStr mod, pp_as as]) + ppr (ImportDecl mod from qual as spec _) + = hang (hsep [ptext SLIT("import"), ppr from, + pp_qual qual, ppr mod, pp_as as]) 4 (pp_spec spec) where - pp_qual False = ppNil - pp_qual True = ppStr "qualified" + pp_qual False = empty + pp_qual True = ptext SLIT("qualified") - pp_as Nothing = ppNil - pp_as (Just a) = ppCat [ppStr "as", ppPStr a] + pp_as Nothing = empty + pp_as (Just a) = ptext SLIT("as ") <+> ppr a - pp_spec Nothing = ppNil + pp_spec Nothing = empty pp_spec (Just (False, spec)) - = ppBesides [ppStr "(", interpp'SP sty spec, ppStr ")"] + = parens (interpp'SP spec) pp_spec (Just (True, spec)) - = ppBesides [ppStr "hiding (", interpp'SP sty spec, ppStr ")"] + = ptext SLIT("hiding") <+> parens (interpp'SP spec) +ideclName (ImportDecl mod_nm _ _ _ _ _) = mod_nm \end{code} %************************************************************************ @@ -57,23 +58,50 @@ instance (Outputable name) => Outputable (ImportDecl name) where \subsection{Imported and exported entities} %* * %************************************************************************ + \begin{code} data IE name = IEVar name - | IEThingAbs name -- Constructor/Type/Class (can't tell) + | 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} +ieName :: IE name -> name +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 (Outputable name) => Outputable (IE name) where - ppr sty (IEVar var) = ppr sty var - ppr sty (IEThingAbs thing) = ppr sty thing - ppr sty (IEThingAll thing) - = ppBesides [ppr sty thing, ppStr "(..)"] - ppr sty (IEThingWith thing withs) - = ppBesides [ppr sty thing, ppLparen, ppInterleave ppComma (map (ppr sty) withs), ppRparen] - ppr sty (IEModuleContents mod) - = ppBeside (ppPStr SLIT("module ")) (ppPStr mod) + ppr (IEVar var) = ppr_var 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_var withs))) + ppr (IEModuleContents mod) + = ptext SLIT("module") <+> ppr mod + +ppr_var v | isOperator v = parens (ppr v) + | otherwise = ppr v +\end{code} + +\begin{code} +isOperator :: Outputable a => a -> Bool +isOperator v = isLexSym (_PK_ (showSDocUnqual (ppr v))) + -- We use (showSDoc (ppr v)), rather than isSymOcc (getOccName v) simply so + -- that we don't need NamedThing in the context of all these functions. + -- Gruesome, but simple. \end{code} +