X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FhsSyn%2FHsImpExp.lhs;h=501599993cf697b9b52e085586fd8c0192cdd22b;hp=c3a3b5b8bd4828cb403883770ad6ce9abac3885c;hb=0af06ed99ed56341adfdda4a92a0a36678780109;hpb=81765cc90d6d91aa1c6a649190d5a4a740a9082e diff --git a/compiler/hsSyn/HsImpExp.lhs b/compiler/hsSyn/HsImpExp.lhs index c3a3b5b..5015999 100644 --- a/compiler/hsSyn/HsImpExp.lhs +++ b/compiler/hsSyn/HsImpExp.lhs @@ -6,21 +6,18 @@ HsImpExp: Abstract syntax: imports, exports, interfaces \begin{code} -{-# OPTIONS -fno-warn-incomplete-patterns #-} --- The above warning supression flag is a temporary kludge. --- While working on this module you are encouraged to remove it and fix --- any warnings in the module. See --- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings --- for details +{-# LANGUAGE DeriveDataTypeable #-} module HsImpExp where import Module ( ModuleName ) -import HsDoc ( HsDoc ) +import HsDoc ( HsDocString ) import Outputable import FastString import SrcLoc ( Located(..) ) + +import Data.Data \end{code} %************************************************************************ @@ -42,7 +39,7 @@ data ImportDecl name ideclQualified :: Bool, -- ^ True => qualified ideclAs :: Maybe ModuleName, -- ^ as Module ideclHiding :: Maybe (Bool, [LIE name]) -- ^ (True => hiding, names) - } + } deriving (Data, Typeable) \end{code} \begin{code} @@ -59,16 +56,17 @@ instance (Outputable name) => Outputable (ImportDecl name) where 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 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 + + ppr_ies [] = ptext (sLit "()") + ppr_ies ies = char '(' <+> interpp'SP ies <+> char ')' \end{code} %************************************************************************ @@ -80,15 +78,17 @@ instance (Outputable name) => Outputable (ImportDecl name) where \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} @@ -97,6 +97,7 @@ ieName (IEVar n) = n ieName (IEThingAbs n) = n ieName (IEThingWith n _) = n ieName (IEThingAll n) = n +ieName _ = panic "ieName failed pattern match!" ieNames :: IE a -> [a] ieNames (IEVar n ) = [n] @@ -116,8 +117,8 @@ instance (Outputable name) => Outputable (IE name) where ppr (IEThingAll thing) = hcat [ppr thing, text "(..)"] ppr (IEThingWith thing withs) = ppr thing <> parens (fsep (punctuate comma (map pprHsVar withs))) - ppr (IEModuleContents mod) - = ptext (sLit "module") <+> ppr mod + ppr (IEModuleContents mod') + = ptext (sLit "module") <+> ppr mod' ppr (IEGroup n _) = text ("") ppr (IEDoc doc) = ppr doc ppr (IEDocNamed string) = text ("")