{-# 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 ((<+>))
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)
simplifyDependency :: Dependency -> Dependency
simplifyDependency (Dependency name range) =
Dependency name (simplifyVersionRange range)