{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE CPP #-}
module Haskell.Docs.Types
(IdentDoc(..)
,DocsException(..)
,Identifier(..)
,PackageName(..)
,PkgID)
where
import Control.Exception (Exception)
import Data.Text (Text)
import Data.Typeable (Typeable)
import Documentation.Haddock (Doc)
import GHC (Id)
import Module (ModuleName)
#if __GLASGOW_HASKELL__ >= 800
import Module (UnitId)
type PkgID = UnitId
#elif __GLASGOW_HASKELL__ >= 710
import Module (PackageKey)
type PkgID = PackageKey
#else
import PackageConfig (PackageIdentifier)
type PkgID = PackageIdentifier
#endif
newtype Identifier = Identifier {unIdentifier :: String}
deriving (Show,Eq)
newtype PackageName = PackageName String
deriving (Show,Eq)
data IdentDoc = IdentDoc
{ identDocPackageName :: !PkgID
, identDocIdentifier :: !Identifier
, identDocModuleName :: !ModuleName
, identDocDocs :: !(Doc String)
, identDocIdent :: !(Maybe Id)
, identDocArgDocs :: !(Maybe [(Int, Doc String)])
}
instance Eq IdentDoc where
a == b = identDocIdent a == identDocIdent b
data DocsException
= NoFindModule
| PackageLookupFailed !Text
| NoModulePackageCombo
| NoInterfaceFiles
| NoParseInterfaceFiles [DocsException]
| NoFindNameInExports
| NoFindNameInInterface
| NoReadInterfaceFile String
deriving (Typeable,Show)
instance Exception DocsException