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] #