More import tidying and fixing the stage 2 build
[ghc-hetmet.git] / compiler / hsSyn / HsSyn.lhs
index 2169b1a..6ed59ee 100644 (file)
@@ -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"
 
@@ -34,6 +39,7 @@ import HsPat
 import HsTypes
 import BasicTypes      ( Fixity, DeprecTxt )
 import HsUtils
+import HsDoc
 
 -- others:
 import IfaceSyn                ( IfaceBinding )
@@ -57,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
@@ -66,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 [
@@ -84,7 +113,7 @@ instance (OutputableBndr name)
                          ],
            pp_nonnull imports,
            pp_nonnull decls
-       ]
+          ]
       where
        pp_header rest = case deprec of
            Nothing -> pp_modname <+> rest
@@ -92,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}