module Distribution.Nixpkgs.Haskell.Constraint
  ( Constraint, constraintPkgName, satisfiesConstraint, satisfiesConstraints
  ) where

import Distribution.Package
import Distribution.Version
import Distribution.Types.PackageVersionConstraint
import Distribution.Nixpkgs.Haskell.OrphanInstances ( )

type Constraint = PackageVersionConstraint

constraintPkgName :: Constraint -> PackageName
constraintPkgName :: Constraint -> PackageName
constraintPkgName (PackageVersionConstraint PackageName
n VersionRange
_) = PackageName
n

satisfiesConstraint :: PackageIdentifier -> Constraint -> Bool
satisfiesConstraint :: PackageIdentifier -> Constraint -> Bool
satisfiesConstraint (PackageIdentifier PackageName
pn Version
v) (PackageVersionConstraint PackageName
cn VersionRange
vr) = (PackageName
pn PackageName -> PackageName -> Bool
forall a. Eq a => a -> a -> Bool
/= PackageName
cn) Bool -> Bool -> Bool
|| (Version
v Version -> VersionRange -> Bool
`withinRange` VersionRange
vr)

satisfiesConstraints :: PackageIdentifier -> [Constraint] -> Bool
satisfiesConstraints :: PackageIdentifier -> [Constraint] -> Bool
satisfiesConstraints PackageIdentifier
p = (Constraint -> Bool) -> [Constraint] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all (PackageIdentifier -> Constraint -> Bool
satisfiesConstraint PackageIdentifier
p)