| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Distribution.Types.VersionRange
Synopsis
- data VersionRange
- hasLowerBound :: VersionRange -> Bool
- hasGTLowerBound :: VersionRange -> Bool
- hasUpperBound :: VersionRange -> Bool
- hasLEUpperBound :: VersionRange -> Bool
- hasTrailingZeroUpperBound :: VersionRange -> Bool
- isAnyVersion :: VersionRange -> Bool
- isAnyVersionLight :: VersionRange -> Bool
- anyVersion :: VersionRange
- noVersion :: VersionRange
- thisVersion :: Version -> VersionRange
- notThisVersion :: Version -> VersionRange
- laterVersion :: Version -> VersionRange
- earlierVersion :: Version -> VersionRange
- orLaterVersion :: Version -> VersionRange
- orEarlierVersion :: Version -> VersionRange
- unionVersionRanges :: VersionRange -> VersionRange -> VersionRange
- intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange
- withinVersion :: Version -> VersionRange
- majorBoundVersion :: Version -> VersionRange
- normaliseVersionRange :: VersionRange -> VersionRange
- stripParensVersionRange :: VersionRange -> VersionRange
- withinRange :: Version -> VersionRange -> Bool
- foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a
- versionRangeParser :: CabalParsing m => m Int -> CabalSpecVersion -> m VersionRange
- data VersionRangeF a where
- ThisVersionF Version
- LaterVersionF Version
- OrLaterVersionF Version
- EarlierVersionF Version
- OrEarlierVersionF Version
- MajorBoundVersionF Version
- UnionVersionRangesF a a
- IntersectVersionRangesF a a
- pattern LEUpperBound :: VersionRangeF a
- pattern GTLowerBound :: VersionRangeF a
- pattern TZUpperBound :: VersionRangeF a
- projectVersionRange :: VersionRange -> VersionRangeF VersionRange
- embedVersionRange :: VersionRangeF VersionRange -> VersionRange
- cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a
- anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange
- hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange
- wildcardUpperBound :: Version -> Version
- majorUpperBound :: Version -> Version
- isWildcardRange :: Version -> Version -> Bool
Version Range
data VersionRange Source #
Instances
Predicates
The parsed VersionRange of each version constraint used in the examples for
hasUpperBound and hasLowerBound are:
>>>simpleParsec "< 1" :: Maybe VersionRangeJust (EarlierVersion (mkVersion [1]))>>>simpleParsec ">= 0 && < 1" :: Maybe VersionRangeJust (IntersectVersionRanges (OrLaterVersion (mkVersion [0])) (EarlierVersion (mkVersion [1])))>>>simpleParsec ">= 0 || < 1" :: Maybe VersionRangeJust (UnionVersionRanges (OrLaterVersion (mkVersion [0])) (EarlierVersion (mkVersion [1])))>>>simpleParsec "^>= 4.20.0.0" :: Maybe VersionRangeJust (MajorBoundVersion (mkVersion [4,20,0,0]))
Lower Bound
hasLowerBound :: VersionRange -> Bool Source #
Does the version range have an explicit lower bound?
Note: this function only considers the user-specified lower bounds, but not the implicit >=0 lower bound.
>>>forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "^>= 4.20.0.0"] (fmap hasLowerBound . simpleParsec)Just [False,True,False,True]
Since: 1.24.0.0
hasGTLowerBound :: VersionRange -> Bool Source #
Is the lower bound version range greater than (GT, >)?
>>>forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "> 0 && < 1", "> 0 || < 1", "^>= 4.20.0.0"] (fmap hasGTLowerBound . simpleParsec)Just [False,False,False,True,True,False]
Upper Bound
hasUpperBound :: VersionRange -> Bool Source #
Does the version range have an upper bound?
>>>forM ["< 1", ">= 0 && < 1", ">= 0 || < 1", "^>= 4.20.0.0"] (fmap hasUpperBound . simpleParsec)Just [True,True,False,True]
Since: 1.24.0.0
hasLEUpperBound :: VersionRange -> Bool Source #
Is the upper bound version range (less than or equal (LE, <=)?
>>>forM ["< 1", "<= 1", ">= 0 && < 1", ">= 0 || < 1", ">= 0 && <= 1", ">= 0 || <= 1", "^>= 4.20.0.0"] (fmap hasLEUpperBound . simpleParsec)Just [False,True,False,False,True,True,False]
hasTrailingZeroUpperBound :: VersionRange -> Bool Source #
Does the upper bound version range have a trailing zero?
>>>forM ["< 1", "< 1.1", "< 1.0", "< 1.1.0", "^>= 4.20.0.0"] (fmap hasTrailingZeroUpperBound . simpleParsec)Just [False,False,True,True,False]
Any Version
isAnyVersion :: VersionRange -> Bool Source #
Does this VersionRange place any restriction on the Version or is it
in fact equivalent to AnyVersion.
Note this is a semantic check, not simply a syntactic check. So for example
the following is True (for all v).
isAnyVersion (EarlierVersion v `UnionVersionRanges` orLaterVersion v)
isAnyVersionLight :: VersionRange -> Bool Source #
Constructing
anyVersion :: VersionRange Source #
The version range -any. That is, a version range containing all
versions.
withinRange v anyVersion = True
noVersion :: VersionRange Source #
The empty version range -none, that is a version range containing no versions.
This can be constructed using any unsatisfiable version range expression,
for example < 0.
withinRange v noVersion = False
thisVersion :: Version -> VersionRange Source #
The version range == v.
withinRange v' (thisVersion v) = v' == v
notThisVersion :: Version -> VersionRange Source #
The version range /= v.
withinRange v' (notThisVersion v) = v' /= v
laterVersion :: Version -> VersionRange Source #
The version range > v.
withinRange v' (laterVersion v) = v' > v
earlierVersion :: Version -> VersionRange Source #
The version range < v.
withinRange v' (earlierVersion v) = v' < v
orLaterVersion :: Version -> VersionRange Source #
The version range >= v.
withinRange v' (orLaterVersion v) = v' >= v
orEarlierVersion :: Version -> VersionRange Source #
The version range <= v.
withinRange v' (orEarlierVersion v) = v' <= v
unionVersionRanges :: VersionRange -> VersionRange -> VersionRange Source #
The version range vr1 || vr2.
withinRange v' (unionVersionRanges vr1 vr2) = withinRange v' vr1 || withinRange v' vr2
intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange Source #
The version range vr1 && vr2.
withinRange v' (intersectVersionRanges vr1 vr2) = withinRange v' vr1 && withinRange v' vr2
withinVersion :: Version -> VersionRange Source #
The version range == v.*.
For example, for version 1.2, the version range == 1.2.* is the same as
>= 1.2 && < 1.3.
withinRange v' (withinVersion v) = v' >= v && v' < upper v
where
upper (Version lower t) = Version (init lower ++ [last lower + 1]) tmajorBoundVersion :: Version -> VersionRange Source #
The version range ^>= v.
For example, for version 1.2.3.4, the version range ^>= 1.2.3.4
is the same as >= 1.2.3.4 && < 1.3.
Note that ^>= 1 is equivalent to >= 1 && < 1.1.
Since: 2.0.0.2
Modification
normaliseVersionRange :: VersionRange -> VersionRange Source #
Normalise VersionRange.
In particular collapse (== v || > v) into >= v, and so on.
stripParensVersionRange :: VersionRange -> VersionRange Source #
Remove VersionRangeParens constructors.
Since version 3.4 this function is id, there aren't VersionRangeParens constructor in VersionRange anymore.
Since: 2.2
Inspection
withinRange :: Version -> VersionRange -> Bool Source #
Does this version fall within the given range?
This is the evaluation function for the VersionRange type.
Arguments
| :: a |
|
| -> (Version -> a) | "== v" |
| -> (Version -> a) | "> v" |
| -> (Version -> a) | "< v" |
| -> (a -> a -> a) |
|
| -> (a -> a -> a) |
|
| -> VersionRange | |
| -> a |
Fold over the basic syntactic structure of a VersionRange.
This provides a syntactic view of the expression defining the version range.
The syntactic sugar ">= v", "<= v" and "== v.*" is presented
in terms of the other basic syntax.
For a semantic view use asVersionIntervals.
Parser
versionRangeParser :: CabalParsing m => m Int -> CabalSpecVersion -> m VersionRange Source #
VersionRange parser parametrised by version digit parser.
versionDigitParseris used for allVersionRange.integralis used for backward-compatpkgconfig-dependsversions,PkgConfigVersionRange.
Since: 3.0
Version F-Algebra
data VersionRangeF a Source #
F-Algebra of VersionRange. See cataVersionRange.
Since: 2.2
Constructors
| ThisVersionF Version |
|
| LaterVersionF Version |
|
| OrLaterVersionF Version |
|
| EarlierVersionF Version |
|
| OrEarlierVersionF Version |
|
| MajorBoundVersionF Version |
|
| UnionVersionRangesF a a |
|
| IntersectVersionRangesF a a |
|
Bundled Patterns
| pattern LEUpperBound :: VersionRangeF a | |
| pattern GTLowerBound :: VersionRangeF a | |
| pattern TZUpperBound :: VersionRangeF a |
Instances
| Foldable VersionRangeF Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods fold :: Monoid m => VersionRangeF m -> m # foldMap :: Monoid m => (a -> m) -> VersionRangeF a -> m # foldMap' :: Monoid m => (a -> m) -> VersionRangeF a -> m # foldr :: (a -> b -> b) -> b -> VersionRangeF a -> b # foldr' :: (a -> b -> b) -> b -> VersionRangeF a -> b # foldl :: (b -> a -> b) -> b -> VersionRangeF a -> b # foldl' :: (b -> a -> b) -> b -> VersionRangeF a -> b # foldr1 :: (a -> a -> a) -> VersionRangeF a -> a # foldl1 :: (a -> a -> a) -> VersionRangeF a -> a # toList :: VersionRangeF a -> [a] # null :: VersionRangeF a -> Bool # length :: VersionRangeF a -> Int # elem :: Eq a => a -> VersionRangeF a -> Bool # maximum :: Ord a => VersionRangeF a -> a # minimum :: Ord a => VersionRangeF a -> a # sum :: Num a => VersionRangeF a -> a # product :: Num a => VersionRangeF a -> a # | |||||
| Traversable VersionRangeF Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods traverse :: Applicative f => (a -> f b) -> VersionRangeF a -> f (VersionRangeF b) # sequenceA :: Applicative f => VersionRangeF (f a) -> f (VersionRangeF a) # mapM :: Monad m => (a -> m b) -> VersionRangeF a -> m (VersionRangeF b) # sequence :: Monad m => VersionRangeF (m a) -> m (VersionRangeF a) # | |||||
| Functor VersionRangeF Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods fmap :: (a -> b) -> VersionRangeF a -> VersionRangeF b # (<$) :: a -> VersionRangeF b -> VersionRangeF a # | |||||
| Data a => Data (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> VersionRangeF a -> c (VersionRangeF a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (VersionRangeF a) # toConstr :: VersionRangeF a -> Constr # dataTypeOf :: VersionRangeF a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (VersionRangeF a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (VersionRangeF a)) # gmapT :: (forall b. Data b => b -> b) -> VersionRangeF a -> VersionRangeF a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> VersionRangeF a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> VersionRangeF a -> r # gmapQ :: (forall d. Data d => d -> u) -> VersionRangeF a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> VersionRangeF a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> VersionRangeF a -> m (VersionRangeF a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> VersionRangeF a -> m (VersionRangeF a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> VersionRangeF a -> m (VersionRangeF a) # | |||||
| Generic (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Associated Types
Methods from :: VersionRangeF a -> Rep (VersionRangeF a) x # to :: Rep (VersionRangeF a) x -> VersionRangeF a # | |||||
| Read a => Read (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods readsPrec :: Int -> ReadS (VersionRangeF a) # readList :: ReadS [VersionRangeF a] # readPrec :: ReadPrec (VersionRangeF a) # readListPrec :: ReadPrec [VersionRangeF a] # | |||||
| Show a => Show (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods showsPrec :: Int -> VersionRangeF a -> ShowS # show :: VersionRangeF a -> String # showList :: [VersionRangeF a] -> ShowS # | |||||
| Eq a => Eq (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal Methods (==) :: VersionRangeF a -> VersionRangeF a -> Bool # (/=) :: VersionRangeF a -> VersionRangeF a -> Bool # | |||||
| type Rep (VersionRangeF a) Source # | |||||
Defined in Distribution.Types.VersionRange.Internal type Rep (VersionRangeF a) = D1 ('MetaData "VersionRangeF" "Distribution.Types.VersionRange.Internal" "Cabal-syntax-3.16.0.0-813lolNablNGaeNilk6GeH" 'False) (((C1 ('MetaCons "ThisVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version)) :+: C1 ('MetaCons "LaterVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version))) :+: (C1 ('MetaCons "OrLaterVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version)) :+: C1 ('MetaCons "EarlierVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version)))) :+: ((C1 ('MetaCons "OrEarlierVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version)) :+: C1 ('MetaCons "MajorBoundVersionF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Version))) :+: (C1 ('MetaCons "UnionVersionRangesF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "IntersectVersionRangesF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))))) | |||||
projectVersionRange :: VersionRange -> VersionRangeF VersionRange Source #
Generic destructor for VersionRange.
Since: 2.2
embedVersionRange :: VersionRangeF VersionRange -> VersionRange Source #
Generic constructor for VersionRange.
Since: 2.2
cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a Source #
Fold VersionRange.
Since: 2.2
anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange Source #
Unfold VersionRange.
Since: 2.2
hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange Source #
Refold VersionRange.
Since: 2.2
Version Utilities
wildcardUpperBound :: Version -> Version Source #
Increment the last version number.
Example: For 1.2 this returns 1.3
so that it can be used as upper bound when resolving == 1.2.*.
For 0.4.1 it returns 0.4.2.
Since: 2.2
majorUpperBound :: Version -> Version Source #
Compute next greater major version to be used as upper bound.
Example: 0.4.1 produces the version 0.5 which then can be used
to construct a range >= 0.4.1 && < 0.5
Since: 2.2