From 63d8fdb71f3a2cbcd4555c092ec8704aabe3153b Mon Sep 17 00:00:00 2001 From: Michael Snoyman <michael@snoyman.com> Date: Sat, 19 Sep 2015 22:59:59 +0300 Subject: [PATCH] Add hasUpperBound and hasLowerBound This is useful for performing PVP bounds checking, especially for tooling that wants to automate such dependency bounds. A demonstration of this being used in practice is the --pvp-bounds flag for stack: https://github.com/commercialhaskell/stack/commit/c774f9905b3b112f58fc3789dfb9c26389d33b24 --- Cabal/Distribution/Version.hs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Cabal/Distribution/Version.hs b/Cabal/Distribution/Version.hs index 17c1fb7b1a..47a13146c6 100644 --- a/Cabal/Distribution/Version.hs +++ b/Cabal/Distribution/Version.hs @@ -44,6 +44,8 @@ module Distribution.Version ( simplifyVersionRange, foldVersionRange, foldVersionRange', + hasUpperBound, + hasLowerBound, -- ** Modification removeUpperBound, @@ -805,3 +807,29 @@ instance Text VersionRange where (">", LaterVersion), (">=", orLaterVersion), ("==", ThisVersion) ] + +-- | Does the version range have an upper bound? +-- +-- @since 1.24.0.0 +hasUpperBound :: VersionRange -> Bool +hasUpperBound AnyVersion = False +hasUpperBound (ThisVersion _) = True +hasUpperBound (LaterVersion _) = False +hasUpperBound (EarlierVersion _) = True +hasUpperBound (WildcardVersion _) = True +hasUpperBound (UnionVersionRanges x y) = hasUpperBound x && hasUpperBound y +hasUpperBound (IntersectVersionRanges x y) = hasUpperBound x || hasUpperBound y +hasUpperBound (VersionRangeParens x) = hasUpperBound x + +-- | Does the version range have a lower bound? +-- +-- @since 1.24.0.0 +hasLowerBound :: VersionRange -> Bool +hasLowerBound AnyVersion = False +hasLowerBound (ThisVersion _) = True +hasLowerBound (LaterVersion _) = True +hasLowerBound (EarlierVersion _) = False +hasLowerBound (WildcardVersion _) = True +hasLowerBound (UnionVersionRanges x y) = hasLowerBound x && hasLowerBound y +hasLowerBound (IntersectVersionRanges x y) = hasLowerBound x || hasLowerBound y +hasLowerBound (VersionRangeParens x) = hasLowerBound x -- GitLab