| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
VersionInterval
Description
This module implements a view of a VersionRange as a finite
list of separated version intervals.
In conversion from and to VersionRange it makes some effort to
preserve the caret operator ^>=x.y. This constraint a priori
specifies the same interval as ==x.y.*, but indicates that newer
versions could be acceptable (allow-newer: ^).
Synopsis
- data VersionIntervals
- unVersionIntervals :: VersionIntervals -> [VersionInterval]
- toVersionIntervals :: VersionRange -> VersionIntervals
- fromVersionIntervals :: VersionIntervals -> Either ConversionProblem VersionRange
- data ConversionProblem
- normaliseVersionRange :: VersionRange -> Either ConversionProblem VersionRange
- data VersionInterval = VI !LB !MB !UB
- data LB = LB !Version
- data MB
- data UB
- data Bound
- validVersionInterval :: VersionInterval -> Bool
- validVersionIntervals :: VersionIntervals -> Bool
- intersectInterval :: VersionInterval -> VersionInterval -> Maybe VersionInterval
- stage1 :: ([VersionInterval] -> [VersionInterval]) -> VersionRange -> [VersionInterval]
- stage2 :: [VersionInterval] -> [VersionInterval]
- stage3 :: [VersionInterval] -> [VersionInterval]
Version intervals
data VersionIntervals #
A complementary representation of a VersionRange. Instead of a boolean
version predicate it uses an increasing sequence of non-overlapping,
non-empty intervals.
This version is different than in Cabal-3.8 and previous,
as it tries to preserve ^>= version ranges under default and transformCaretUpper semantics.
Slighly simplifying, normalizeVersionRange shouldn't destroy ^>= in version range expressions.
Instances
| Show VersionIntervals # | |
Defined in VersionInterval Methods showsPrec :: Int -> VersionIntervals -> ShowS # show :: VersionIntervals -> String # showList :: [VersionIntervals] -> ShowS # | |
| Eq VersionIntervals # | |
Defined in VersionInterval Methods (==) :: VersionIntervals -> VersionIntervals -> Bool # (/=) :: VersionIntervals -> VersionIntervals -> Bool # | |
unVersionIntervals :: VersionIntervals -> [VersionInterval] #
Inspect the list of version intervals.
Conversions
toVersionIntervals :: VersionRange -> VersionIntervals #
Convert a VersionRange to a sequence of version intervals.
fromVersionIntervals :: VersionIntervals -> Either ConversionProblem VersionRange #
Convert a VersionIntervals value back into a VersionRange expression
representing the version intervals.
data ConversionProblem #
Constructors
| IntervalsEmpty | |
| OtherConversionProblem |
Instances
| Show ConversionProblem # | |
Defined in VersionInterval Methods showsPrec :: Int -> ConversionProblem -> ShowS # show :: ConversionProblem -> String # showList :: [ConversionProblem] -> ShowS # | |
| Eq ConversionProblem # | |
Defined in VersionInterval Methods (==) :: ConversionProblem -> ConversionProblem -> Bool # (/=) :: ConversionProblem -> ConversionProblem -> Bool # | |
Normalisation
normaliseVersionRange :: VersionRange -> Either ConversionProblem VersionRange #
Convert VersionRange to VersionIntervals and back.
Version intervals view
data VersionInterval #
Instances
| Show VersionInterval # | |
Defined in VersionInterval Methods showsPrec :: Int -> VersionInterval -> ShowS # show :: VersionInterval -> String # showList :: [VersionInterval] -> ShowS # | |
| Eq VersionInterval # | |
Defined in VersionInterval Methods (==) :: VersionInterval -> VersionInterval -> Bool # (/=) :: VersionInterval -> VersionInterval -> Bool # | |
Lower bound. For intervals it always exist: zeroLB i.e. >= 0.
All lower bound intervals are inclusive, i.e. >=v. >x.y.z is converted into >=x.y.z.0.
Upper bound.
All upper bounds are exclusive, i.e. <v. <=x.y.z is converted to <x.y.z.0.
For testing
validVersionIntervals :: VersionIntervals -> Bool #
VersionIntervals invariant:
- all intervals are valid (lower bound is less then upper bound, middle bound is in between)
- intervals doesn't touch each other (distinct)
stage1 :: ([VersionInterval] -> [VersionInterval]) -> VersionRange -> [VersionInterval] #
stage2 :: [VersionInterval] -> [VersionInterval] #
stage3 :: [VersionInterval] -> [VersionInterval] #