cabal-lenses-0.4: lib/CabalLenses/Package.hs
{-# LANGUAGE TemplateHaskell, TypeFamilies, FlexibleInstances, MultiParamTypeClasses #-}
-- |
-- Lenses for several data types of the 'Distribution.Package' module.
-- All lenses are named after their field names with a 'L' appended.
module CabalLenses.Package where
import Distribution.Package (PackageName(..) , PackageIdentifier(..) , Dependency(..))
import Distribution.Version (VersionRange)
import Control.Lens
makeLensesFor [ ("pkgName" , "pkgNameL")
, ("pkgVersion", "pkgVersionL")
] ''PackageIdentifier
instance (t ~ PackageName) => Rewrapped PackageName t
instance Wrapped PackageName where
type Unwrapped PackageName = String
_Wrapped' = iso getPackageName PackageName
where
getPackageName (PackageName n) = n
{-# INLINE _Wrapped' #-}
packageName :: Lens' Dependency PackageName
packageName = lens getPkgName setPkgName
where
getPkgName (Dependency pkgName _) = pkgName
setPkgName (Dependency _ range) newPkgName = Dependency newPkgName range
versionRange :: Lens' Dependency VersionRange
versionRange = lens getRange setRange
where
getRange (Dependency _ range) = range
setRange (Dependency pkgName _) = Dependency pkgName