packages feed

bumper-0.7.0.0: src/Version.hs

-- * Manipulation functions for cabal versions and version ranges
{-# LANGUAGE TemplateHaskell #-}
module Version where

import Distribution.Version

-- | Function to bump the nth position in a version to a higher number
-- trailing version number will be discarded
bumpPosition :: Int -> Version -> Version
bumpPosition p v = mkVersion $ addPos p (versionNumbers v)
  where
    addPos 0 []      = [1]
    addPos 0 (vn: _)  = [vn+1]
    addPos x []      = 0 : addPos (x - 1) []
    addPos x (vn: vns) = vn : addPos (x - 1) vns

previousVersion :: Version -> Version
previousVersion = mkVersion . mkPrevious . versionNumbers
  where mkPrevious = reverse . prevHelp . reverse
        prevHelp []     = []
        prevHelp (x:xs) = if x <= 1 then xs else (x - 1): xs -- No trailing zeros

nextVersion :: Version -> Version
nextVersion = mkVersion . mkNext . versionNumbers
  where mkNext = reverse . nextHelp . reverse
        nextHelp []     = []
        nextHelp (x:xs) = (x + 1) : xs

addVersionToRange :: Version -> VersionRange -> VersionRange
addVersionToRange new r =
  if withinRange new r
  then r
  else unionVersionRanges r (thisVersion new)