    -- | Haskell Program Coverage (HPC) support
    module GHC.Types.HpcInfo
       ( HpcInfo (..)
       , AnyHpcUsage
       , emptyHpcInfo
       , isHpcUsed
       )
    where

    import GHC.Prelude

    -- | Information about a modules use of Haskell Program Coverage
    data HpcInfo
      = HpcInfo
         { HpcInfo -> Int
    hpcInfoTickCount :: Int
         , HpcInfo -> Int
    hpcInfoHash      :: Int
         }
      | NoHpcInfo
         { HpcInfo -> AnyHpcUsage
    hpcUsed          :: AnyHpcUsage  -- ^ Is hpc used anywhere on the module \*tree\*?
         }

    -- | This is used to signal if one of my imports used HPC instrumentation
    -- even if there is no module-local HPC usage
    type AnyHpcUsage = Bool

    emptyHpcInfo :: AnyHpcUsage -> HpcInfo
    emptyHpcInfo :: AnyHpcUsage -> HpcInfo
    emptyHpcInfo = AnyHpcUsage -> HpcInfo
    NoHpcInfo

    -- | Find out if HPC is used by this module or any of the modules
    -- it depends upon
    isHpcUsed :: HpcInfo -> AnyHpcUsage
    isHpcUsed :: HpcInfo -> AnyHpcUsage
    isHpcUsed (HpcInfo {})                   = AnyHpcUsage
    True
    isHpcUsed (NoHpcInfo { hpcUsed :: HpcInfo -> AnyHpcUsage
    hpcUsed = AnyHpcUsage
    used }) = AnyHpcUsage
    used