X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FhsSyn%2FHsSyn.lhs;h=6ed59eec148813d2a607c43433034cf02244c1e1;hp=a9982a630a7437863dd3bf28e4645fc6b7bf1ee8;hb=ab22f4e6456820c1b5169d75f5975a94e61f54ce;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/compiler/hsSyn/HsSyn.lhs b/compiler/hsSyn/HsSyn.lhs index a9982a6..6ed59ee 100644 --- a/compiler/hsSyn/HsSyn.lhs +++ b/compiler/hsSyn/HsSyn.lhs @@ -1,4 +1,5 @@ % +% (c) The University of Glasgow 2006 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % \section{Haskell abstract syntax definition} @@ -17,10 +18,14 @@ module HsSyn ( module HsPat, module HsTypes, module HsUtils, + module HsDoc, Fixity, - HsModule(..), HsExtCore(..) - ) where + HsModule(..), HsExtCore(..), + + HaddockModInfo(..), + emptyHaddockModInfo, +) where #include "HsVersions.h" @@ -32,22 +37,22 @@ import HsImpExp import HsLit import HsPat import HsTypes -import HscTypes ( DeprecTxt ) -import BasicTypes ( Fixity ) +import BasicTypes ( Fixity, DeprecTxt ) import HsUtils +import HsDoc -- others: import IfaceSyn ( IfaceBinding ) import Outputable import SrcLoc ( Located(..) ) -import Module ( Module ) +import Module ( Module, ModuleName ) \end{code} All we actually declare here is the top-level structure for a module. \begin{code} data HsModule name = HsModule - (Maybe (Located Module))-- Nothing => "module X where" is omitted + (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* @@ -58,6 +63,24 @@ data HsModule name -- 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 +} data HsExtCore name -- Read from Foo.hcr = HsExtCore @@ -67,15 +90,20 @@ data HsExtCore name -- Read from Foo.hcr [IfaceBinding] -- And the bindings \end{code} + \begin{code} +instance Outputable Char where + ppr c = text [c] + instance (OutputableBndr name) => Outputable (HsModule name) where - ppr (HsModule Nothing _ imports decls _) - = pp_nonnull imports $$ pp_nonnull decls + ppr (HsModule Nothing _ imports decls _ _ _ mbDoc) + = pp_mb mbDoc $$ pp_nonnull imports $$ pp_nonnull decls - ppr (HsModule (Just name) exports imports decls deprec) + ppr (HsModule (Just name) exports imports decls deprec opts _ mbDoc) = vcat [ + pp_mb mbDoc, case exports of Nothing -> pp_header (ptext SLIT("where")) Just es -> vcat [ @@ -85,7 +113,7 @@ instance (OutputableBndr name) ], pp_nonnull imports, pp_nonnull decls - ] + ] where pp_header rest = case deprec of Nothing -> pp_modname <+> rest @@ -93,6 +121,9 @@ instance (OutputableBndr name) pp_modname = ptext SLIT("module") <+> ppr name +pp_mb (Just x) = ppr x +pp_mb Nothing = empty + pp_nonnull [] = empty pp_nonnull xs = vcat (map ppr xs) \end{code}