X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FhsSyn%2FHsSyn.lhs;h=be7e0036df4bf920fb9af56a83d612378b03594d;hp=f7b05e73fb0544fd8d07345facef155db114a60e;hb=e5c3b478b3cd1707cf122833822f44b2ac09b8e9;hpb=ad94d40948668032189ad22a0ad741ac1f645f50 diff --git a/compiler/hsSyn/HsSyn.lhs b/compiler/hsSyn/HsSyn.lhs index f7b05e7..be7e003 100644 --- a/compiler/hsSyn/HsSyn.lhs +++ b/compiler/hsSyn/HsSyn.lhs @@ -9,12 +9,7 @@ which is declared in the various \tr{Hs*} modules. This module, therefore, is almost nothing but re-exporting. \begin{code} -{-# OPTIONS -w #-} --- 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/CodingStyle#Warnings --- for details +{-# LANGUAGE DeriveDataTypeable #-} module HsSyn ( module HsBinds, @@ -28,14 +23,9 @@ module HsSyn ( module HsDoc, Fixity, - HsModule(..), HsExtCore(..), - - HaddockModInfo(..), - emptyHaddockModInfo, + HsModule(..), HsExtCore(..), CodeFlavor(..) ) where -#include "HsVersions.h" - -- friends: import HsDecls import HsBinds @@ -44,50 +34,51 @@ import HsImpExp import HsLit import HsPat import HsTypes -import BasicTypes ( Fixity, DeprecTxt ) +import BasicTypes ( Fixity, WarningTxt ) import HsUtils import HsDoc -- others: import IfaceSyn ( IfaceBinding ) import Outputable -import SrcLoc ( Located(..) ) +import SrcLoc import Module ( Module, ModuleName ) +import FastString + +-- libraries: +import Data.Data hiding ( Fixity ) \end{code} -All we actually declare here is the top-level structure for a module. \begin{code} + +data CodeFlavor = LambdaFlavor | KappaFlavor + +-- | All we actually declare here is the top-level structure for a module. data HsModule name - = HsModule - (Maybe (Located ModuleName))-- Nothing => "module X where" is omitted - -- (in which case the next field is Nothing too) - (Maybe [LIE name]) -- Export list; Nothing => export list omitted, so export everything - -- Just [] => export *nothing* - -- Just [...] => as you would expect... - [LImportDecl name] -- We snaffle interesting stuff out of the - -- imported interfaces early on, adding that - -- info to TyDecls/etc; so this list is - -- often empty, downstream. - [LHsDecl name] -- Type, class, value, and interface signature decls - (Maybe DeprecTxt) -- reason/explanation for deprecation of this module - (Maybe String) -- Haddock options, declared with the {-# DOCOPTIONS ... #-} pragma - (HaddockModInfo name) -- Haddock module info - (Maybe (HsDoc name)) -- Haddock module description - -data HaddockModInfo name = HaddockModInfo { - hmi_description :: Maybe (HsDoc name), - hmi_portability :: Maybe String, - hmi_stability :: Maybe String, - hmi_maintainer :: Maybe String -} - -emptyHaddockModInfo :: HaddockModInfo a -emptyHaddockModInfo = HaddockModInfo { - hmi_description = Nothing, - hmi_portability = Nothing, - hmi_stability = Nothing, - hmi_maintainer = Nothing -} + = HsModule { + hsmodName :: Maybe (Located ModuleName), + -- ^ @Nothing@: \"module X where\" is omitted (in which case the next + -- field is Nothing too) + hsmodExports :: Maybe [LIE name], + -- ^ Export list + -- + -- - @Nothing@: export list omitted, so export everything + -- + -- - @Just []@: export /nothing/ + -- + -- - @Just [...]@: as you would expect... + -- + hsmodImports :: [LImportDecl name], + -- ^ We snaffle interesting stuff out of the imported interfaces early + -- on, adding that info to TyDecls/etc; so this list is often empty, + -- downstream. + hsmodDecls :: [LHsDecl name], + -- ^ Type, class, value, and interface signature decls + hsmodDeprecMessage :: Maybe WarningTxt, + -- ^ reason\/explanation for warning/deprecation of this module + hsmodHaddockModHeader :: Maybe LHsDocString + -- ^ Haddock module info and description, unparsed + } deriving (Data, Typeable) data HsExtCore name -- Read from Foo.hcr = HsExtCore @@ -105,18 +96,18 @@ instance Outputable Char where instance (OutputableBndr name) => Outputable (HsModule name) where - ppr (HsModule Nothing _ imports decls _ _ _ mbDoc) + ppr (HsModule Nothing _ imports decls _ mbDoc) = pp_mb mbDoc $$ pp_nonnull imports $$ pp_nonnull decls - ppr (HsModule (Just name) exports imports decls deprec opts _ mbDoc) + ppr (HsModule (Just name) exports imports decls deprec mbDoc) = vcat [ pp_mb mbDoc, case exports of - Nothing -> pp_header (ptext SLIT("where")) + Nothing -> pp_header (ptext (sLit "where")) Just es -> vcat [ pp_header lparen, nest 8 (fsep (punctuate comma (map ppr es))), - nest 4 (ptext SLIT(") where")) + nest 4 (ptext (sLit ") where")) ], pp_nonnull imports, pp_nonnull decls @@ -126,11 +117,13 @@ instance (OutputableBndr name) Nothing -> pp_modname <+> rest Just d -> vcat [ pp_modname, ppr d, rest ] - pp_modname = ptext SLIT("module") <+> ppr name + pp_modname = ptext (sLit "module") <+> ppr name +pp_mb :: Outputable t => Maybe t -> SDoc pp_mb (Just x) = ppr x pp_mb Nothing = empty +pp_nonnull :: Outputable t => [t] -> SDoc pp_nonnull [] = empty pp_nonnull xs = vcat (map ppr xs) \end{code}