{-# 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' Version [Int]
versionBranchL = forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso Version -> [Int]
versionNumbers [Int] -> Version
mkVersion


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


lowerBound :: Lens' VersionInterval LowerBound
lowerBound :: Lens' VersionInterval LowerBound
lowerBound = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens VersionInterval -> LowerBound
getLowerBound VersionInterval -> LowerBound -> VersionInterval
setLowerBound
   where
      getLowerBound :: VersionInterval -> LowerBound
getLowerBound (VersionInterval LowerBound
lowerBound UpperBound
_)            = LowerBound
lowerBound
      setLowerBound :: VersionInterval -> LowerBound -> VersionInterval
setLowerBound (VersionInterval LowerBound
_ UpperBound
upperBound) LowerBound
lowerBound = LowerBound -> UpperBound -> VersionInterval
VersionInterval LowerBound
lowerBound UpperBound
upperBound


version :: Lens' LowerBound Version
version :: Lens' LowerBound Version
version = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens LowerBound -> Version
getVersion LowerBound -> Version -> LowerBound
setVersion
   where
      getVersion :: LowerBound -> Version
getVersion (LowerBound Version
vers Bound
_)          = Version
vers
      setVersion :: LowerBound -> Version -> LowerBound
setVersion (LowerBound Version
_    Bound
bound) Version
vers = Version -> Bound -> LowerBound
LowerBound Version
vers Bound
bound


bound :: Lens' LowerBound Bound
bound :: Lens' LowerBound Bound
bound = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens LowerBound -> Bound
getBound LowerBound -> Bound -> LowerBound
setBound
   where
      getBound :: LowerBound -> Bound
getBound (LowerBound Version
_ Bound
bound)      = Bound
bound
      setBound :: LowerBound -> Bound -> LowerBound
setBound (LowerBound Version
vers Bound
_) Bound
bound = Version -> Bound -> LowerBound
LowerBound Version
vers Bound
bound


upperBound :: Lens' VersionInterval UpperBound
upperBound :: Lens' VersionInterval UpperBound
upperBound = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens VersionInterval -> UpperBound
getUpperBound VersionInterval -> UpperBound -> VersionInterval
setUpperBound
   where
      getUpperBound :: VersionInterval -> UpperBound
getUpperBound (VersionInterval LowerBound
_ UpperBound
upperBound)            = UpperBound
upperBound
      setUpperBound :: VersionInterval -> UpperBound -> VersionInterval
setUpperBound (VersionInterval LowerBound
lowerBound UpperBound
_) UpperBound
upperBound = LowerBound -> UpperBound -> VersionInterval
VersionInterval LowerBound
lowerBound UpperBound
upperBound


noLowerBound :: LowerBound
noLowerBound :: LowerBound
noLowerBound = Version -> Bound -> LowerBound
LowerBound ([Int] -> Version
mkVersion [Int
0]) Bound
InclusiveBound