Distribution/Types/AnnotatedId.hs

    module Distribution.Types.AnnotatedId (
        AnnotatedId(..)
    ) where

    import Prelude ()
    import Distribution.Compat.Prelude

    import Distribution.Package
    import Distribution.Types.ComponentName

    -- | An 'AnnotatedId' is a 'ComponentId', 'UnitId', etc.
    -- which is annotated with some other useful information
    -- that is useful for printing to users, etc.
    --
    -- Invariant: if ann_id x == ann_id y, then ann_pid x == ann_pid y
    -- and ann_cname x == ann_cname y
    data AnnotatedId id = AnnotatedId {
            ann_pid   :: PackageId,
            ann_cname :: ComponentName,
            ann_id    :: id
        }
        deriving (Show)

    instance Eq id => Eq (AnnotatedId id) where
        x == y = ann_id x == ann_id y

    instance Ord id => Ord (AnnotatedId id) where
        compare x y = compare (ann_id x) (ann_id y)

    instance Package (AnnotatedId id) where
        packageId = ann_pid

    instance Functor AnnotatedId where
        fmap f (AnnotatedId pid cn x) = AnnotatedId pid cn (f x)