module CabalBounds.Targets
( Targets(..)
, Target(..)
, targets
, dependenciesOf
) where
import Control.Lens
import qualified Distribution.PackageDescription as C
import qualified Distribution.Package as C
import CabalBounds.Args
import CabalBounds.Lenses
data Targets = Targets [Target]
| AllTargets
deriving (Show, Eq)
data Target = Library
| Executable String
| TestSuite String
| Benchmark String
deriving (Show, Eq)
targets :: Args -> Targets
targets args
| ts@(_:_) <- concat [ if (library args) then [Library] else []
, map Executable (executable args)
, map TestSuite (testSuite args)
, map Benchmark (benchmark args)
]
= Targets ts
| otherwise
= AllTargets
dependenciesOf :: Target -> Traversal' C.GenericPackageDescription [C.Dependency]
dependenciesOf Library = dependenciesOfLib
dependenciesOf (Executable exe) = dependenciesOfExe exe
dependenciesOf (TestSuite test) = dependenciesOfTest test
dependenciesOf (Benchmark benchm) = dependenciesOfBenchm benchm