packages feed

cabal-lenses-0.11.0: lib/CabalLenses/Version.hs

{-# LANGUAGE TemplateHaskell #-}

-- |
-- Lenses for several data types of the 'Distribution.Version' module.
-- All lenses are named after their field names with a 'L' appended.

module CabalLenses.Version where

import Distribution.Version
import Control.Lens


versionBranchL :: Iso' Version [Int]
versionBranchL = iso versionNumbers mkVersion


--intervals :: Iso' VersionRange [VersionInterval]
--intervals = iso asVersionIntervals toVersionRange
--   where
--      toVersionRange []        = anyVersion
--      toVersionRange intervals = fromVersionIntervals . VersionIntervals $ intervals


lowerBound :: Lens' VersionInterval LowerBound
lowerBound = lens getLowerBound setLowerBound
   where
      getLowerBound (VersionInterval lowerBound _)            = lowerBound
      setLowerBound (VersionInterval _ upperBound) lowerBound = VersionInterval lowerBound upperBound


version :: Lens' LowerBound Version
version = lens getVersion setVersion
   where
      getVersion (LowerBound vers _)          = vers
      setVersion (LowerBound _    bound) vers = LowerBound vers bound


bound :: Lens' LowerBound Bound
bound = lens getBound setBound
   where
      getBound (LowerBound _ bound)      = bound
      setBound (LowerBound vers _) bound = LowerBound vers bound


upperBound :: Lens' VersionInterval UpperBound
upperBound = lens getUpperBound setUpperBound
   where
      getUpperBound (VersionInterval _ upperBound)            = upperBound
      setUpperBound (VersionInterval lowerBound _) upperBound = VersionInterval lowerBound upperBound


noLowerBound :: LowerBound
noLowerBound = LowerBound (mkVersion [0]) InclusiveBound