| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Distribution.Types.VersionInterval
Description
In Cabal-3.6 this module have been rewritten.
Synopsis
- data VersionIntervals
- unVersionIntervals :: VersionIntervals -> [VersionInterval]
- toVersionIntervals :: VersionRange -> VersionIntervals
- fromVersionIntervals :: VersionIntervals -> VersionRange
- normaliseVersionRange2 :: VersionRange -> VersionRange
- relaxLastInterval :: VersionIntervals -> VersionIntervals
- relaxHeadInterval :: VersionIntervals -> VersionIntervals
- asVersionIntervals :: VersionRange -> [VersionInterval]
- data VersionInterval = VersionInterval !LowerBound !UpperBound
- data LowerBound = LowerBound !Version !Bound
- data UpperBound
- data Bound
- invariantVersionIntervals :: VersionIntervals -> Bool
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.
The key point is that this representation gives a canonical representation
for the semantics of VersionRanges. This makes it easier to check things
like whether a version range is empty, covers all versions, or requires a
certain minimum or maximum version. It also makes it easy to check equality
or containment. It also makes it easier to identify 'simple' version
predicates for translation into foreign packaging systems that do not
support complex version range expressions.
Instances
| Show VersionIntervals # | |
Defined in Distribution.Types.VersionInterval | |
| Eq VersionIntervals # | |
Defined in Distribution.Types.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 -> VersionRange #
Convert a VersionIntervals value back into a VersionRange expression
representing the version intervals.
Normalisation
normaliseVersionRange2 :: VersionRange -> VersionRange #
Since Cabal-3.6 this function.. TODO
Relaxation
Version intervals view
asVersionIntervals :: VersionRange -> [VersionInterval] #
View a VersionRange as a union of intervals.
This provides a canonical view of the semantics of a VersionRange as
opposed to the syntax of the expression used to define it. For the syntactic
view use foldVersionRange.
Each interval is non-empty. The sequence is in increasing order and no
intervals overlap or touch. Therefore only the first and last can be
unbounded. The sequence can be empty if the range is empty
(e.g. a range expression like && 2).
Other checks are trivial to implement using this view. For example:
isNoVersion vr | [] <- asVersionIntervals vr = True
| otherwise = FalseisSpecificVersion vr
| [(LowerBound v InclusiveBound
,UpperBound v' InclusiveBound)] <- asVersionIntervals vr
, v == v' = Just v
| otherwise = Nothingdata VersionInterval #
Constructors
| VersionInterval !LowerBound !UpperBound |
Instances
| Show VersionInterval # | |
Defined in Distribution.Types.VersionInterval | |
| Eq VersionInterval # | |
Defined in Distribution.Types.VersionInterval Methods (==) :: VersionInterval -> VersionInterval -> Bool # (/=) :: VersionInterval -> VersionInterval -> Bool # | |
data LowerBound #
Constructors
| LowerBound !Version !Bound |
Instances
| Show LowerBound # | |
Defined in Distribution.Types.VersionInterval | |
| Eq LowerBound # | |
Defined in Distribution.Types.VersionInterval | |
data UpperBound #
Constructors
| NoUpperBound | |
| UpperBound !Version !Bound |
Instances
| Show UpperBound # | |
Defined in Distribution.Types.VersionInterval | |
| Eq UpperBound # | |
Defined in Distribution.Types.VersionInterval | |
Constructors
| ExclusiveBound | |
| InclusiveBound |
Invariants
invariantVersionIntervals :: VersionIntervals -> Bool #
VersionIntervals invariant:
- all intervals are valid (lower bound is less then upper bound, i.e. non-empty)
- intervals doesn't touch each other (distinct)