packages feed

cabal-bounds-0.2: src/CabalBounds/Lenses.hs

{-# LANGUAGE TemplateHaskell, Rank2Types #-}

module CabalBounds.Lenses
   ( vbranch
   , vtags
   , dependenciesOfLib
   , dependenciesOfAllExes
   , dependenciesOfExe
   , dependenciesOfAllTests
   , dependenciesOfTest
   , dependenciesOfAllBenchms
   , dependenciesOfBenchm
   ) where

import Distribution.PackageDescription
import Distribution.Package
import Distribution.Version
import Control.Lens
import Data.Data.Lens

makeLensesFor [ ("condLibrary"    , "condLibraryL")
              , ("condExecutables", "condExecutablesL")
              , ("condTestSuites" , "condTestSuitesL")
              , ("condBenchmarks" , "condBenchmarksL")
              ] ''GenericPackageDescription

makeLensesFor [ ("versionBranch", "vbranch")
              , ("versionTags"  , "vtags")
              ] ''Version

dependenciesOfLib :: Traversal' GenericPackageDescription [Dependency]
dependenciesOfLib = condLibraryL . _Just . biplate

dependenciesOfAllExes :: Traversal' GenericPackageDescription [Dependency]
dependenciesOfAllExes = condExecutablesL . traversed . _2 . biplate

dependenciesOfExe :: String -> Traversal' GenericPackageDescription [Dependency]
dependenciesOfExe exe = condExecutablesL . traversed . filtered ((== exe) . fst) . _2 . biplate

dependenciesOfAllTests :: Traversal' GenericPackageDescription [Dependency]
dependenciesOfAllTests = condTestSuitesL . traversed . _2 . biplate

dependenciesOfTest :: String -> Traversal' GenericPackageDescription [Dependency]
dependenciesOfTest test = condTestSuitesL . traversed . filtered ((== test) . fst) . _2 . biplate

dependenciesOfAllBenchms :: Traversal' GenericPackageDescription [Dependency]
dependenciesOfAllBenchms = condBenchmarksL . traversed . _2 . biplate

dependenciesOfBenchm :: String -> Traversal' GenericPackageDescription [Dependency]
dependenciesOfBenchm benchm = condBenchmarksL . traversed . filtered ((== benchm) . fst) . _2 . biplate