X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FhsSyn%2FHsImpExp.lhs;h=dd24aedb2b4704eeffcea2cc83d92e0b14bc2795;hp=029ec28475646bb9c7eb8c3e4c139ecb7a8a0138;hb=f278f0676579f67075033a4f9857715909c4b71e;hpb=8e76ea3d26c93a581fc5133833044cade2fbccc7 diff --git a/compiler/hsSyn/HsImpExp.lhs b/compiler/hsSyn/HsImpExp.lhs index 029ec28..dd24aed 100644 --- a/compiler/hsSyn/HsImpExp.lhs +++ b/compiler/hsSyn/HsImpExp.lhs @@ -12,18 +12,18 @@ HsImpExp: Abstract syntax: imports, exports, interfaces -- any warnings in the module. See -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings -- for details +{-# LANGUAGE DeriveDataTypeable #-} module HsImpExp where -#include "HsVersions.h" - import Module ( ModuleName ) -import HsDoc ( HsDoc ) +import HsDoc ( HsDocString ) import Outputable import FastString import SrcLoc ( Located(..) ) -import Char ( isAlpha ) + +import Data.Data \end{code} %************************************************************************ @@ -36,38 +36,43 @@ One per \tr{import} declaration in a module. \begin{code} type LImportDecl name = Located (ImportDecl name) +-- | A single Haskell @import@ declaration. data ImportDecl name - = ImportDecl (Located ModuleName) -- module name - Bool -- True <=> {-# SOURCE #-} import - Bool -- True => qualified - (Maybe ModuleName) -- as Module - (Maybe (Bool, [LIE name])) -- (True => hiding, names) + = ImportDecl { + ideclName :: Located ModuleName, -- ^ Module name. + ideclPkgQual :: Maybe FastString, -- ^ Package qualifier. + ideclSource :: Bool, -- ^ True <=> {-# SOURCE #-} import + ideclQualified :: Bool, -- ^ True => qualified + ideclAs :: Maybe ModuleName, -- ^ as Module + ideclHiding :: Maybe (Bool, [LIE name]) -- ^ (True => hiding, names) + } deriving (Data, Typeable) \end{code} \begin{code} instance (Outputable name) => Outputable (ImportDecl name) where - ppr (ImportDecl mod from qual as spec) - = hang (hsep [ptext SLIT("import"), ppr_imp from, - pp_qual qual, ppr mod, pp_as as]) + ppr (ImportDecl mod pkg from qual as spec) + = hang (hsep [ptext (sLit "import"), ppr_imp from, + pp_qual qual, pp_pkg pkg, ppr mod, pp_as as]) 4 (pp_spec spec) where + pp_pkg Nothing = empty + pp_pkg (Just p) = doubleQuotes (ftext p) + pp_qual False = empty - pp_qual True = ptext SLIT("qualified") + pp_qual True = ptext (sLit "qualified") pp_as Nothing = empty - pp_as (Just a) = ptext SLIT("as ") <+> ppr a + pp_as (Just a) = ptext (sLit "as") <+> ppr a - ppr_imp True = ptext SLIT("{-# SOURCE #-}") + ppr_imp True = ptext (sLit "{-# SOURCE #-}") ppr_imp False = empty - pp_spec Nothing = empty - pp_spec (Just (False, spec)) - = parens (interpp'SP spec) - pp_spec (Just (True, spec)) - = ptext SLIT("hiding") <+> parens (interpp'SP spec) + pp_spec Nothing = empty + pp_spec (Just (False, ies)) = ppr_ies ies + pp_spec (Just (True, ies)) = ptext (sLit "hiding") <+> ppr_ies ies -ideclName :: ImportDecl name -> Located ModuleName -ideclName (ImportDecl mod_nm _ _ _ _) = mod_nm + ppr_ies [] = ptext (sLit "()") + ppr_ies ies = char '(' <+> interpp'SP ies <+> char ')' \end{code} %************************************************************************ @@ -79,15 +84,17 @@ ideclName (ImportDecl mod_nm _ _ _ _) = mod_nm \begin{code} type LIE name = Located (IE name) +-- | Imported or exported entity. data IE name = IEVar 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 ModuleName -- (Export Only) - | IEGroup Int (HsDoc name) -- Doc section heading - | IEDoc (HsDoc name) -- Some documentation - | IEDocNamed String -- Reference to named doc + | 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 ModuleName -- ^ (Export Only) + | IEGroup Int HsDocString -- ^ Doc section heading + | IEDoc HsDocString -- ^ Some documentation + | IEDocNamed String -- ^ Reference to named doc + deriving (Data, Typeable) \end{code} \begin{code} @@ -116,31 +123,10 @@ instance (Outputable name) => Outputable (IE name) where ppr (IEThingWith thing withs) = ppr thing <> parens (fsep (punctuate comma (map pprHsVar withs))) ppr (IEModuleContents mod) - = ptext SLIT("module") <+> ppr mod + = ptext (sLit "module") <+> ppr mod ppr (IEGroup n _) = text ("") ppr (IEDoc doc) = ppr doc ppr (IEDocNamed string) = text ("") \end{code} -\begin{code} -pprHsVar :: Outputable name => name -> SDoc -pprHsVar v | isOperator ppr_v = parens ppr_v - | otherwise = ppr_v - where - ppr_v = ppr v - -isOperator :: SDoc -> Bool -isOperator ppr_v - = case showSDocUnqual ppr_v of - ('(':_) -> False -- (), (,) etc - ('[':_) -> False -- [] - ('$':c:_) -> not (isAlpha c) -- Don't treat $d as an operator - (':':c:_) -> not (isAlpha c) -- Don't treat :T as an operator - ('_':_) -> False -- Not an operator - (c:_) -> not (isAlpha c) -- Starts with non-alpha - _ -> False - -- 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}