cabal-bounds-0.2: src/CabalBounds/Dependencies.hs
{-# LANGUAGE PatternGuards, Rank2Types #-}
module CabalBounds.Dependencies
( Dependencies(..)
, dependencies
, filterDependencies
) where
import Control.Lens
import qualified CabalBounds.Args as A
import Distribution.Package (Dependency(..), PackageName(..))
data Dependencies = AllDependencies
| OnlyDependencies [String]
| IgnoreDependencies [String]
deriving (Show, Eq)
dependencies :: A.Args -> Dependencies
dependencies args
| ds@(_:_) <- A.only args
= OnlyDependencies ds
| ds@(_:_) <- A.ignore args
= IgnoreDependencies ds
| otherwise
= AllDependencies
filterDependencies :: Dependencies -> Traversal' [Dependency] Dependency
filterDependencies AllDependencies =
traversed
filterDependencies (OnlyDependencies deps) =
traversed . filtered (\(Dependency (PackageName pkgName) _) -> any (== pkgName) deps)
filterDependencies (IgnoreDependencies deps) =
traversed . filtered (\(Dependency (PackageName pkgName) _) -> all (/= pkgName) deps)