    module GHC.Unit.Module.Status
       ( HscStatus (..)
       )
    where

    import GHC.Prelude

    import GHC.Unit
    import GHC.Unit.Module.ModGuts
    import GHC.Unit.Module.ModIface
    import GHC.Unit.Module.ModDetails

    import GHC.Utils.Fingerprint

    -- | Status of a module compilation to machine code
    data HscStatus
        -- | Nothing to do.
        = HscNotGeneratingCode ModIface ModDetails
        -- | Nothing to do because code already exists.
        | HscUpToDate ModIface ModDetails
        -- | Update boot file result.
        | HscUpdateBoot ModIface ModDetails
        -- | Generate signature file (backpack)
        | HscUpdateSig ModIface ModDetails
        -- | Recompile this module.
        | HscRecomp
            { HscStatus -> CgGuts
    hscs_guts           :: CgGuts
              -- ^ Information for the code generator.
            , HscStatus -> ModLocation
    hscs_mod_location   :: !ModLocation
              -- ^ Module info
            , HscStatus -> PartialModIface
    hscs_partial_iface  :: !PartialModIface
              -- ^ Partial interface
            , HscStatus -> Maybe Fingerprint
    hscs_old_iface_hash :: !(Maybe Fingerprint)
              -- ^ Old interface hash for this compilation, if an old interface file
              -- exists. Pass to `hscMaybeWriteIface` when writing the interface to
              -- avoid updating the existing interface when the interface isn't
              -- changed.
            }