update submodules for GHC.HetMet.GArrow -> Control.GArrow renaming
[ghc-hetmet.git] / compiler / hsSyn / HsSyn.lhs
index f7b05e7..be7e003 100644 (file)
@@ -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}