Distribution/Types/ExeDependency.hs

    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE DeriveGeneric #-}
    module Distribution.Types.ExeDependency
      ( ExeDependency(..)
      , qualifiedExeName
      ) where

    import Prelude ()
    import Distribution.Compat.Prelude

    import Distribution.Types.ComponentName
    import Distribution.Types.UnqualComponentName
    import Distribution.Types.PackageName
    import Distribution.Version ( VersionRange, anyVersion )

    import qualified Distribution.Compat.ReadP as Parse
    import Distribution.Compat.ReadP
    import Distribution.Text

    import Text.PrettyPrint ((<+>), text)

    -- | Describes a dependency on an executable from a package
    --
    data ExeDependency = ExeDependency
                         PackageName
                         UnqualComponentName -- name of executable component of package
                         VersionRange
                         deriving (Generic, Read, Show, Eq, Typeable, Data)

    instance Binary ExeDependency
    instance NFData ExeDependency where rnf = genericRnf

    instance Text ExeDependency where
      disp (ExeDependency name exe ver) =
        (disp name <<>> text ":" <<>> disp exe) <+> disp ver

      parse = do name <- parse
                 _ <- Parse.char ':'
                 exe <- parse
                 Parse.skipSpaces
                 ver <- parse <++ return anyVersion
                 Parse.skipSpaces
                 return (ExeDependency name exe ver)

    qualifiedExeName :: ExeDependency -> ComponentName
    qualifiedExeName (ExeDependency _ ucn _) = CExeName ucn