diff options
| -rw-r--r-- | src/Haddock/Types.hs | 290 | 
1 files changed, 147 insertions, 143 deletions
| diff --git a/src/Haddock/Types.hs b/src/Haddock/Types.hs index c00870f9..db8a3198 100644 --- a/src/Haddock/Types.hs +++ b/src/Haddock/Types.hs @@ -53,99 +53,100 @@ type DocPaths      = (FilePath, Maybe FilePath) -- paths to HTML and sources  -- lies in creating this structure. Note that the record contains some fields  -- that are only used to create the final record, and that are not used by the  -- backends. -data Interface = Interface { +data Interface = Interface +  { +    -- | The module behind this interface. +    ifaceMod             :: Module -  -- | The module represented by this interface. -  ifaceMod             :: Module, +    -- | Original file name of the module. +  , ifaceOrigFilename    :: FilePath -  -- | Original file name of the module. -  ifaceOrigFilename    :: FilePath, +    -- | Textual information about the module. +  , ifaceInfo            :: !(HaddockModInfo Name) -  -- | Textual information about the module. -  ifaceInfo            :: !(HaddockModInfo Name), +    -- | Documentation header. +  , ifaceDoc             :: !(Maybe (Doc Name)) -  -- | Documentation header. -  ifaceDoc             :: !(Maybe (Doc Name)), +    -- | Documentation header with cross-reference information. +  , ifaceRnDoc           :: Maybe (Doc DocName) -  -- | Documentation header with link information. -  ifaceRnDoc           :: Maybe (Doc DocName), +    -- | Haddock options for this module (prune, ignore-exports, etc). +  , ifaceOptions         :: ![DocOption] -  -- | Haddock options for this module (prune, ignore-exports, etc). -  ifaceOptions         :: ![DocOption], +    -- | Declarations originating from the module. Excludes declarations without +    -- names (instances and stand-alone documentation comments). Includes +    -- names of subordinate declarations mapped to their parent declarations. +  , ifaceDeclMap         :: Map Name DeclInfo -  -- | Declarations originating from the module. Excludes declarations without -  -- names (instances and stand-alone documentation comments). Includes -  -- names of subordinate declarations mapped to their parent declarations. -  ifaceDeclMap         :: Map Name DeclInfo, +    -- | Documentation of declarations originating from the module (including +    -- subordinates). +  , ifaceRnDocMap        :: Map Name (DocForDecl DocName) -  -- | Documentation of declarations originating from the module (including -  -- subordinates). -  ifaceRnDocMap        :: Map Name (DocForDecl DocName), +  , ifaceSubMap          :: Map Name [Name] -  ifaceSubMap          :: Map Name [Name], +  , ifaceExportItems     :: ![ExportItem Name] +  , ifaceRnExportItems   :: [ExportItem DocName] -  ifaceExportItems     :: ![ExportItem Name], -  ifaceRnExportItems   :: [ExportItem DocName], +    -- | All names exported by the module. +  , ifaceExports         :: ![Name] -  -- | All names exported by the module. -  ifaceExports         :: ![Name], +    -- | All \"visible\" names exported by the module. +    -- A visible name is a name that will show up in the documentation of the +    -- module. +  , ifaceVisibleExports  :: ![Name] -  -- | All \"visible\" names exported by the module. -  -- A visible name is a name that will show up in the documentation of the -  -- module. -  ifaceVisibleExports  :: ![Name], +    -- | Instances exported by the module. +  , ifaceInstances       :: ![Instance] -  -- | Instances exported by the module. -  ifaceInstances       :: ![Instance], +    -- | Documentation of instances defined in the module. +  , ifaceInstanceDocMap  :: Map Name (Doc Name) -  -- | Documentation of instances defined in the module. -  ifaceInstanceDocMap  :: Map Name (Doc Name), +    -- | The number of haddockable and haddocked items in the module, as a +    -- tuple. Haddockable items are the exports and the module itself. +  , ifaceHaddockCoverage  :: (Int,Int) +  } -  -- | The number of haddockable and haddocked items in the module, as a -  -- tuple. Haddockable items are the exports and the module itself. -  ifaceHaddockCoverage  :: (Int,Int) -}  -- | A subset of the fields of 'Interface' that we store in the interface  -- files. -data InstalledInterface = InstalledInterface { +data InstalledInterface = InstalledInterface +  { +    -- | The module represented by this interface. +    instMod            :: Module -  -- | The module represented by this interface. -  instMod            :: Module, +    -- | Textual information about the module. +  , instInfo           :: HaddockModInfo Name -  -- | Textual information about the module. -  instInfo           :: HaddockModInfo Name, +    -- | Documentation of declarations originating from the module (including +    -- subordinates). +  , instDocMap         :: Map Name (DocForDecl Name) -  -- | Documentation of declarations originating from the module (including -  -- subordinates). -  instDocMap         :: Map Name (DocForDecl Name), +    -- | All names exported by this module. +  , instExports        :: [Name] -  -- | All names exported by this module. -  instExports        :: [Name], +    -- | All \"visible\" names exported by the module. +    -- A visible name is a name that will show up in the documentation of the +    -- module. +  , instVisibleExports :: [Name] -  -- | All \"visible\" names exported by the module. -  -- A visible name is a name that will show up in the documentation of the -  -- module. -  instVisibleExports :: [Name], +    -- | Haddock options for this module (prune, ignore-exports, etc). +  , instOptions        :: [DocOption] -  -- | Haddock options for this module (prune, ignore-exports, etc). -  instOptions        :: [DocOption], - -  instSubMap         :: Map Name [Name] -} +  , instSubMap         :: Map Name [Name] +  }  -- | Convert an 'Interface' to an 'InstalledInterface'  toInstalledIface :: Interface -> InstalledInterface -toInstalledIface interface = InstalledInterface { -  instMod            = ifaceMod            interface, -  instInfo           = ifaceInfo           interface, -  instDocMap         = fmap unrenameDocForDecl $ ifaceRnDocMap interface, -  instExports        = ifaceExports        interface, -  instVisibleExports = ifaceVisibleExports interface, -  instOptions        = ifaceOptions        interface, -  instSubMap         = ifaceSubMap         interface -} +toInstalledIface interface = InstalledInterface +  { instMod            = ifaceMod            interface +  , instInfo           = ifaceInfo           interface +  , instDocMap         = fmap unrenameDocForDecl $ ifaceRnDocMap interface +  , instExports        = ifaceExports        interface +  , instVisibleExports = ifaceVisibleExports interface +  , instOptions        = ifaceOptions        interface +  , instSubMap         = ifaceSubMap         interface +  }  ----------------------------------------------------------------------------- @@ -155,53 +156,55 @@ toInstalledIface interface = InstalledInterface {  data ExportItem name -  = ExportDecl { - -      -- | A declaration -      expItemDecl :: LHsDecl name, - -      -- | Maybe a doc comment, and possibly docs for arguments (if this -      -- decl is a function or type-synonym) -      expItemMbDoc :: DocForDecl name, - -      -- | Subordinate names, possibly with documentation -      expItemSubDocs :: [(name, DocForDecl name)], +  -- | An exported declaration. +  = ExportDecl +      { +        -- | A declaration. +        expItemDecl :: LHsDecl name -      -- | Instances relevant to this declaration, possibly with documentation -      expItemInstances :: [DocInstance name] +        -- | Maybe a doc comment, and possibly docs for arguments (if this +        -- decl is a function or type-synonym). +      , expItemMbDoc :: DocForDecl name -    } -- ^ An exported declaration +        -- | Subordinate names, possibly with documentation. +      , expItemSubDocs :: [(name, DocForDecl name)] -  | ExportNoDecl { -      expItemName :: name, +        -- | Instances relevant to this declaration, possibly with +        -- documentation. +      , expItemInstances :: [DocInstance name] +      } -      -- | Subordinate names -      expItemSubs :: [name] +  -- | An exported entity for which we have no documentation (perhaps because it +  -- resides in another package). +  | ExportNoDecl +      { expItemName :: name -    } -- ^ An exported entity for which we have no -      -- documentation (perhaps because it resides in -      -- another package) +        -- | Subordinate names. +      , expItemSubs :: [name] +      } -  | ExportGroup { +  -- | A section heading.  +  | ExportGroup +      { +        -- | Section level (1, 2, 3, ...). +        expItemSectionLevel :: Int -      -- | Section level (1, 2, 3, ... ) -      expItemSectionLevel :: Int, +        -- | Section id (for hyperlinks). +      , expItemSectionId :: String -      -- | Section id (for hyperlinks) -      expItemSectionId :: String, +        -- | Section heading text. +      , expItemSectionText :: Doc name +      } -      -- | Section heading text -      expItemSectionText :: Doc name +  -- | Some documentation. +  | ExportDoc (Doc name) -    } -- ^ A section heading - -  | ExportDoc (Doc name) -- ^ Some documentation - -  | ExportModule Module    -- ^ A cross-reference to another module +  -- | A cross-reference to another module. +  | ExportModule Module  -- | A declaration that may have documentation, including its subordinates, --- which may also have documentation +-- which may also have documentation.  type DeclInfo = (Decl, DocForDecl Name, [(Name, DocForDecl Name)]) @@ -255,8 +258,8 @@ instance NamedThing DocName where  type DocInstance name = (InstHead name, Maybe (Doc name)) --- | The head of an instance. Consists of a context, a class name and a list of --- instance types. +-- | The head of an instance. Consists of a context, a class name and a list +-- of instance types.  type InstHead name = ([HsPred name], name, [HsType name]) @@ -303,41 +306,41 @@ exampleToString (Example expression result) =      ">>> " ++ expression ++ "\n" ++  unlines result -data DocMarkup id a = Markup { -  markupEmpty         :: a, -  markupString        :: String -> a, -  markupParagraph     :: a -> a, -  markupAppend        :: a -> a -> a, -  markupIdentifier    :: [id] -> a, -  markupModule        :: String -> a, -  markupEmphasis      :: a -> a, -  markupMonospaced    :: a -> a, -  markupUnorderedList :: [a] -> a, -  markupOrderedList   :: [a] -> a, -  markupDefList       :: [(a,a)] -> a, -  markupCodeBlock     :: a -> a, -  markupURL           :: String -> a, -  markupAName         :: String -> a, -  markupPic           :: String -> a, -  markupExample       :: [Example] -> a -} - - -data HaddockModInfo name = HaddockModInfo { -  hmi_description :: Maybe (Doc name), -  hmi_portability :: Maybe String, -  hmi_stability   :: Maybe String, -  hmi_maintainer  :: Maybe String -} +data DocMarkup id a = Markup +  { markupEmpty         :: a +  , markupString        :: String -> a +  , markupParagraph     :: a -> a +  , markupAppend        :: a -> a -> a +  , markupIdentifier    :: [id] -> a +  , markupModule        :: String -> a +  , markupEmphasis      :: a -> a +  , markupMonospaced    :: a -> a +  , markupUnorderedList :: [a] -> a +  , markupOrderedList   :: [a] -> a +  , markupDefList       :: [(a,a)] -> a +  , markupCodeBlock     :: a -> a +  , markupURL           :: String -> a +  , markupAName         :: String -> a +  , markupPic           :: String -> a +  , markupExample       :: [Example] -> a +  } + + +data HaddockModInfo name = HaddockModInfo +  { hmi_description :: Maybe (Doc 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 -} +emptyHaddockModInfo = HaddockModInfo +  { hmi_description = Nothing +  , hmi_portability = Nothing +  , hmi_stability   = Nothing +  , hmi_maintainer  = Nothing +  }  ----------------------------------------------------------------------------- @@ -348,21 +351,22 @@ emptyHaddockModInfo = HaddockModInfo {  {-! for DocOption derive: Binary !-}  -- | Source-level options for controlling the documentation.  data DocOption -  = OptHide           -- ^ This module should not appear in the docs +  = OptHide            -- ^ This module should not appear in the docs.    | OptPrune -  | OptIgnoreExports  -- ^ Pretend everything is exported -  | OptNotHome        -- ^ Not the best place to get docs for things -                      -- exported by this module. +  | OptIgnoreExports   -- ^ Pretend everything is exported. +  | OptNotHome         -- ^ Not the best place to get docs for things +                       -- exported by this module.    deriving (Eq, Show)  -- | Option controlling how to qualify names  data Qualification -  = NoQual                      -- ^ Never qualify any names -  | FullQual                    -- ^ Qualify all names fully -  | LocalQual (Maybe Module)    -- ^ Qualify all imported names fully -  | RelativeQual (Maybe Module) -- ^ Like local, but strip module prefix -                                --   from modules in the same hierarchy +  = NoQual                       -- ^ Never qualify any names. +  | FullQual                     -- ^ Qualify all names fully. +  | LocalQual (Maybe Module)     -- ^ Qualify all imported names fully. +  | RelativeQual (Maybe Module)  -- ^ Like local, but strip module prefix. +                                 --   from modules in the same hierarchy. +  -----------------------------------------------------------------------------  -- * Error handling @@ -395,7 +399,7 @@ tell w = Writer ((), w)  -- Exceptions --- | Haddock's own exception type +-- | Haddock's own exception type.  data HaddockException = HaddockException String deriving Typeable | 
