Distribution.Types.VersionRange

Cabal-2.4.0.1: A framework for packaging Haskell software

Safe Haskell | None
Language | Haskell2010

Distribution.Types.VersionRange

Contents

- Version ranges
  - Constructing
  - Inspection
  - Cata & ana
  - Utilities

Synopsis

- data VersionRange
  - = AnyVersion
  - | ThisVersion Version
  - | LaterVersion Version
  - | OrLaterVersion Version
  - | EarlierVersion Version
  - | OrEarlierVersion Version
  - | WildcardVersion Version
  - | MajorBoundVersion Version
  - | UnionVersionRanges VersionRange VersionRange
  - | IntersectVersionRanges VersionRange VersionRange
  - | VersionRangeParens VersionRange
- 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
- withinRange :: Version -> VersionRange -> Bool
- foldVersionRange :: a -> (Version -> a) -> (Version -> a) -> (Version -> a) -> (a -> a -> a) -> (a -> a -> a) -> VersionRange -> a
- normaliseVersionRange :: VersionRange -> VersionRange
- stripParensVersionRange :: VersionRange -> VersionRange
- hasUpperBound :: VersionRange -> Bool
- hasLowerBound :: VersionRange -> Bool
- data VersionRangeF a
  - = AnyVersionF
  - | ThisVersionF Version
  - | LaterVersionF Version
  - | OrLaterVersionF Version
  - | EarlierVersionF Version
  - | OrEarlierVersionF Version
  - | WildcardVersionF Version
  - | MajorBoundVersionF Version
  - | UnionVersionRangesF a a
  - | IntersectVersionRangesF a a
  - | VersionRangeParensF a
- cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a
- anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange
- hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange
- projectVersionRange :: VersionRange -> VersionRangeF VersionRange
- embedVersionRange :: VersionRangeF VersionRange -> VersionRange
- wildcardUpperBound :: Version -> Version
- majorUpperBound :: Version -> Version
- isWildcardRange :: Version -> Version -> Bool

# Version ranges

data VersionRange #

Constructors

AnyVersion | Deprecated: Use `anyVersion`, `foldVersionRange` or `asVersionIntervals`
ThisVersion Version | Deprecated: Use `thisVersion`, `foldVersionRange` or `asVersionIntervals`
LaterVersion Version | Deprecated: Use `laterVersion`, `foldVersionRange` or `asVersionIntervals`
OrLaterVersion Version |
EarlierVersion Version | Deprecated: Use `earlierVersion`, `foldVersionRange` or `asVersionIntervals`
OrEarlierVersion Version |
WildcardVersion Version | Deprecated: Use `anyVersion`, `foldVersionRange` or `asVersionIntervals`
MajorBoundVersion Version |
UnionVersionRanges VersionRange VersionRange | Deprecated: Use `unionVersionRanges`, `foldVersionRange` or `asVersionIntervals`
IntersectVersionRanges VersionRange VersionRange | Deprecated: Use `intersectVersionRanges`, `foldVersionRange` or `asVersionIntervals`
VersionRangeParens VersionRange |

Instances

Eq VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods (==) :: VersionRange -> VersionRange -> Bool # (/=) :: VersionRange -> VersionRange -> Bool #
Data VersionRange # |
Instance details Defined in Distribution.Types.VersionRange 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 :: (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 # |
Instance details Defined in Distribution.Types.VersionRange Methods readsPrec :: Int -> ReadS VersionRange Source # readList :: ReadS [VersionRange] Source # readPrec :: ReadPrec VersionRange Source # readListPrec :: ReadPrec [VersionRange] Source #
Show VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods showsPrec :: Int -> VersionRange -> ShowS Source # show :: VersionRange -> String Source # showList :: [VersionRange] -> ShowS Source #
Generic VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Associated Types type Rep VersionRange :: Type -> Type Source # Methods from :: VersionRange -> Rep VersionRange x Source # to :: Rep VersionRange x -> VersionRange Source #
Binary VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods put :: VersionRange -> Put Source # get :: Get VersionRange Source # putList :: [VersionRange] -> Put Source #
NFData VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods rnf :: VersionRange -> () Source #
Pretty VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods pretty :: VersionRange -> Doc #
Parsec VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods parsec :: CabalParsing m => m VersionRange #
Text VersionRange # |
Instance details Defined in Distribution.Types.VersionRange Methods disp :: VersionRange -> Doc # parse :: ReadP r VersionRange #
Newtype TestedWith (CompilerFlavor, VersionRange) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: (CompilerFlavor, VersionRange) -> TestedWith # unpack :: TestedWith -> (CompilerFlavor, VersionRange) #
Newtype SpecVersion (Either Version VersionRange) # |
Instance details Defined in Distribution.Parsec.Newtypes Methods pack :: Either Version VersionRange -> SpecVersion # unpack :: SpecVersion -> Either Version VersionRange #
type Rep VersionRange # |
Instance details Defined in Distribution.Types.VersionRange type Rep VersionRange = D1 (MetaData "VersionRange" "Distribution.Types.VersionRange" "Cabal-2.4.0.1" 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 #

The version range `-any`. That is, a version range containing all versions.

    withinRange v anyVersion = True

noVersion :: VersionRange #

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 #

The version range `== v`

    withinRange v' (thisVersion v) = v' == v

notThisVersion :: Version -> VersionRange #

The version range `|| v`

    withinRange v' (notThisVersion v) = v' /= v

laterVersion :: Version -> VersionRange #

The version range `> v`

    withinRange v' (laterVersion v) = v' > v

earlierVersion :: Version -> VersionRange #

The version range `< v`

    withinRange v' (earlierVersion v) = v' < v

orLaterVersion :: Version -> VersionRange #

The version range `>= v`

    withinRange v' (orLaterVersion v) = v' >= v

orEarlierVersion :: Version -> VersionRange #

The version range `<= v`

    withinRange v' (orEarlierVersion v) = v' <= v

unionVersionRanges :: VersionRange -> VersionRange -> VersionRange #

The version range `vr1 || vr2`

      withinRange v' (unionVersionRanges vr1 vr2)
    = withinRange v' vr1 || withinRange v' vr2

intersectVersionRanges :: VersionRange -> VersionRange -> VersionRange #

The version range `vr1 && vr2`

      withinRange v' (intersectVersionRanges vr1 vr2)
    = withinRange v' vr1 && withinRange v' vr2

withinVersion :: Version -> VersionRange #

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 #

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: Cabal-2.0.0.2

## Inspection

withinRange :: Version -> VersionRange -> Bool #

Does this version fall within the given range?

This is the evaluation function for the `VersionRange` type.

foldVersionRange #

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 #

Normalise `VersionRange`.

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

stripParensVersionRange :: VersionRange -> VersionRange #

Remove `VersionRangeParens` constructors.

Since: Cabal-2.2

hasUpperBound :: VersionRange -> Bool #

Does the version range have an upper bound?

Since: Cabal-1.24.0.0

hasLowerBound :: VersionRange -> Bool #

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: Cabal-1.24.0.0

## Cata & ana

data VersionRangeF a #

F-Algebra of `VersionRange`. See `cataVersionRange`.

Since: Cabal-2.2

Constructors

AnyVersionF |
ThisVersionF Version |
LaterVersionF Version |
OrLaterVersionF Version |
EarlierVersionF Version |
OrEarlierVersionF Version |
WildcardVersionF Version |
MajorBoundVersionF Version |
UnionVersionRangesF a a |
IntersectVersionRangesF a a |
VersionRangeParensF a |

Instances

Functor VersionRangeF # |
Instance details Defined in Distribution.Types.VersionRange Methods fmap :: (a -> b) -> VersionRangeF a -> VersionRangeF b Source # (<$) :: a -> VersionRangeF b -> VersionRangeF a Source #
Foldable VersionRangeF # |
Instance details Defined in Distribution.Types.VersionRange Methods fold :: Monoid m => VersionRangeF m -> m Source # foldMap :: Monoid m => (a -> m) -> VersionRangeF a -> m Source # foldr :: (a -> b -> b) -> b -> VersionRangeF a -> b Source # foldr' :: (a -> b -> b) -> b -> VersionRangeF a -> b Source # foldl :: (b -> a -> b) -> b -> VersionRangeF a -> b Source # foldl' :: (b -> a -> b) -> b -> VersionRangeF a -> b Source # foldr1 :: (a -> a -> a) -> VersionRangeF a -> a Source # foldl1 :: (a -> a -> a) -> VersionRangeF a -> a Source # toList :: VersionRangeF a -> [a] Source # null :: VersionRangeF a -> Bool Source # length :: VersionRangeF a -> Int Source # elem :: Eq a => a -> VersionRangeF a -> Bool Source # maximum :: Ord a => VersionRangeF a -> a Source # minimum :: Ord a => VersionRangeF a -> a Source # sum :: Num a => VersionRangeF a -> a Source # product :: Num a => VersionRangeF a -> a Source #
Traversable VersionRangeF # |
Instance details Defined in Distribution.Types.VersionRange Methods traverse :: Applicative f => (a -> f b) -> VersionRangeF a -> f (VersionRangeF b) Source # sequenceA :: Applicative f => VersionRangeF (f a) -> f (VersionRangeF a) Source # mapM :: Monad m => (a -> m b) -> VersionRangeF a -> m (VersionRangeF b) Source # sequence :: Monad m => VersionRangeF (m a) -> m (VersionRangeF a) Source #
Eq a => Eq (VersionRangeF a) # |
Instance details Defined in Distribution.Types.VersionRange Methods (==) :: VersionRangeF a -> VersionRangeF a -> Bool # (/=) :: VersionRangeF a -> VersionRangeF a -> Bool #
Data a => Data (VersionRangeF a) # |
Instance details Defined in Distribution.Types.VersionRange 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 :: (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) # |
Instance details Defined in Distribution.Types.VersionRange Methods readsPrec :: Int -> ReadS (VersionRangeF a) Source # readList :: ReadS [VersionRangeF a] Source # readPrec :: ReadPrec (VersionRangeF a) Source # readListPrec :: ReadPrec [VersionRangeF a] Source #
Show a => Show (VersionRangeF a) # |
Instance details Defined in Distribution.Types.VersionRange Methods showsPrec :: Int -> VersionRangeF a -> ShowS Source # show :: VersionRangeF a -> String Source # showList :: [VersionRangeF a] -> ShowS Source #
Generic (VersionRangeF a) # |
Instance details Defined in Distribution.Types.VersionRange Associated Types type Rep (VersionRangeF a) :: Type -> Type Source # Methods from :: VersionRangeF a -> Rep (VersionRangeF a) x Source # to :: Rep (VersionRangeF a) x -> VersionRangeF a Source #
type Rep (VersionRangeF a) # |
Instance details Defined in Distribution.Types.VersionRange type Rep (VersionRangeF a) = D1 (MetaData "VersionRangeF" "Distribution.Types.VersionRange" "Cabal-2.4.0.1" 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))))))

cataVersionRange :: (VersionRangeF a -> a) -> VersionRange -> a #

Fold `VersionRange`.

Since: Cabal-2.2

anaVersionRange :: (a -> VersionRangeF a) -> a -> VersionRange #

Unfold `VersionRange`.

Since: Cabal-2.2

hyloVersionRange :: (VersionRangeF VersionRange -> VersionRange) -> (VersionRange -> VersionRangeF VersionRange) -> VersionRange -> VersionRange #

Refold `VersionRange`

Since: Cabal-2.2

projectVersionRange :: VersionRange -> VersionRangeF VersionRange #

Since: Cabal-2.2

embedVersionRange :: VersionRangeF VersionRange -> VersionRange #

Since: Cabal-2.2

## Utilities

wildcardUpperBound :: Version -> Version #

Since: Cabal-2.2

majorUpperBound :: Version -> Version #

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: Cabal-2.2

isWildcardRange :: Version -> Version -> Bool #