{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Distribution.Types.Dependency ( Dependency(..) , depPkgName , depVerRange , thisPackageVersion , notThisPackageVersion , simplifyDependency ) where import Prelude () import Distribution.Compat.Prelude import Distribution.Version ( VersionRange, thisVersion , notThisVersion, anyVersion , simplifyVersionRange ) import qualified Distribution.Compat.ReadP as Parse import Distribution.Text import Distribution.Pretty import Distribution.Parsec.Class import Distribution.Types.PackageId import Distribution.Types.PackageName import Text.PrettyPrint ((<+>)) -- | Describes a dependency on a source package (API) -- data Dependency = Dependency PackageName VersionRange deriving (Generic, Read, Show, Eq, Typeable, Data) depPkgName :: Dependency -> PackageName depPkgName (Dependency pn _) = pn depVerRange :: Dependency -> VersionRange depVerRange (Dependency _ vr) = vr instance Binary Dependency instance NFData Dependency where rnf = genericRnf instance Pretty Dependency where pretty (Dependency name ver) = pretty name <+> pretty ver instance Parsec Dependency where parsec = do name <- lexemeParsec ver <- parsec <|> pure anyVersion return (Dependency name ver) instance Text Dependency where parse = do name <- parse Parse.skipSpaces ver <- parse Parse.<++ return anyVersion Parse.skipSpaces return (Dependency name ver) thisPackageVersion :: PackageIdentifier -> Dependency thisPackageVersion (PackageIdentifier n v) = Dependency n (thisVersion v) notThisPackageVersion :: PackageIdentifier -> Dependency notThisPackageVersion (PackageIdentifier n v) = Dependency n (notThisVersion v) -- | Simplify the 'VersionRange' expression in a 'Dependency'. -- See 'simplifyVersionRange'. -- simplifyDependency :: Dependency -> Dependency simplifyDependency (Dependency name range) = Dependency name (simplifyVersionRange range)