Cabal-3.2.1.0: A framework for packaging Haskell software
Safe Haskell None
Language Haskell2010

Distribution.Types.VersionRange

Synopsis

Version ranges

data VersionRange Source #

Instances

Instances details
Eq VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Data VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> VersionRange -> c VersionRange Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c VersionRange Source #

toConstr :: VersionRange -> Constr Source #

dataTypeOf :: VersionRange -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c VersionRange ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c VersionRange ) Source #

gmapT :: ( forall b. Data b => b -> b) -> VersionRange -> VersionRange Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> VersionRange -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> VersionRange -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> VersionRange -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> VersionRange -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> VersionRange -> m VersionRange Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> VersionRange -> m VersionRange Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> VersionRange -> m VersionRange Source #

Read VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Show VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Generic VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Binary VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

NFData VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Structured VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Pretty VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Parsec VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Newtype ( Either Version VersionRange ) SpecVersion Source #
Instance details

Defined in Distribution.Parsec.Newtypes

Newtype ( CompilerFlavor , VersionRange ) TestedWith Source #
Instance details

Defined in Distribution.Parsec.Newtypes

type Rep VersionRange Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

type Rep VersionRange = D1 (' MetaData "VersionRange" "Distribution.Types.VersionRange.Internal" "Cabal-3.2.1.0-3w1fQQbNnuQ5xlFGwVXcPy" ' False ) ((( C1 (' MetaCons "AnyVersion" ' PrefixI ' False ) ( U1 :: Type -> Type ) :+: C1 (' MetaCons "ThisVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version ))) :+: ( C1 (' MetaCons "LaterVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version )) :+: ( C1 (' MetaCons "OrLaterVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version )) :+: C1 (' MetaCons "EarlierVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version ))))) :+: (( C1 (' MetaCons "OrEarlierVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version )) :+: ( C1 (' MetaCons "WildcardVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version )) :+: C1 (' MetaCons "MajorBoundVersion" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Version )))) :+: ( C1 (' MetaCons "UnionVersionRanges" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 VersionRange ) :*: S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 VersionRange )) :+: ( C1 (' MetaCons "IntersectVersionRanges" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 VersionRange ) :*: S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 VersionRange )) :+: C1 (' MetaCons "VersionRangeParens" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 VersionRange ))))))

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, that is a version range containing no versions.

This can be constructed using any unsatisfiable version range expression, for example > 1 && < 1 .

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' (laterVersion v) = v' >= v && v' < upper v
  where
    upper (Version lower t) = Version (init lower ++ [last lower + 1]) t

majorBoundVersion :: 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

Inspection

withinRange :: Version -> VersionRange -> Bool Source #

Does this version fall within the given range?

This is the evaluation function for the VersionRange type.

foldVersionRange Source #

Arguments

:: a

"-any" version

-> ( Version -> a)
"== v"
-> ( Version -> a)
"> v"
-> ( Version -> a)
"< v"
-> (a -> a -> a)

"_ || _" union

-> (a -> a -> a)

"_ && _" intersection

-> 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 .

normaliseVersionRange :: VersionRange -> VersionRange Source #

Normalise VersionRange .

In particular collapse (== v || > v) into >= v , and so on.

hasUpperBound :: VersionRange -> Bool Source #

Does the version range have an upper bound?

Since: 1.24.0.0

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.

Since: 1.24.0.0

Cata & ana

data VersionRangeF a Source #

F-Algebra of VersionRange . See cataVersionRange .

Since: 2.2

Instances

Instances details
Functor VersionRangeF Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Foldable VersionRangeF Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Traversable VersionRangeF Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Eq a => Eq ( VersionRangeF a) Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Data a => Data ( VersionRangeF a) Source #
Instance details

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) Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ( VersionRangeF a) Source #

toConstr :: VersionRangeF a -> Constr Source #

dataTypeOf :: VersionRangeF a -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ( VersionRangeF a)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c ( VersionRangeF a)) Source #

gmapT :: ( forall b. Data b => b -> b) -> VersionRangeF a -> VersionRangeF a Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> VersionRangeF a -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> VersionRangeF a -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> VersionRangeF a -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> VersionRangeF a -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> VersionRangeF a -> m ( VersionRangeF a) Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> VersionRangeF a -> m ( VersionRangeF a) Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> VersionRangeF a -> m ( VersionRangeF a) Source #

Read a => Read ( VersionRangeF a) Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Show a => Show ( VersionRangeF a) Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

Generic ( VersionRangeF a) Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

type Rep ( VersionRangeF a) Source #
Instance details

Defined in Distribution.Types.VersionRange.Internal

type Rep ( VersionRangeF a) = D1 (' MetaData "VersionRangeF" "Distribution.Types.VersionRange.Internal" "Cabal-3.2.1.0-3w1fQQbNnuQ5xlFGwVXcPy" ' False ) ((( C1 (' MetaCons "AnyVersionF" ' PrefixI ' False ) ( U1 :: Type -> Type ) :+: 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 "WildcardVersionF" ' 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)) :+: C1 (' MetaCons "VersionRangeParensF" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 a))))))

Utilities

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

versionRangeParser :: forall m. CabalParsing m => m Int -> m VersionRange Source #

VersionRange parser parametrised by version digit parser

Since: 3.0