module Portage.Dependency.Builder
(
empty_dependency
, addDepUseFlag
, setSlotDep
, mkUseDependency
, overAtom
) where
import Portage.Dependency.Types
import Portage.Use
empty_dependency :: Dependency
empty_dependency :: Dependency
empty_dependency = [Dependency] -> Dependency
DependAllOf []
addDepUseFlag :: UseFlag -> Dependency -> Dependency
addDepUseFlag :: UseFlag -> Dependency -> Dependency
addDepUseFlag UseFlag
n = (Atom -> Atom) -> Dependency -> Dependency
overAtom (\(Atom PackageName
pn DRange
dr (DAttr SlotDepend
s [UseFlag]
u)) -> PackageName -> DRange -> DAttr -> Atom
Atom PackageName
pn DRange
dr (SlotDepend -> [UseFlag] -> DAttr
DAttr SlotDepend
s (UseFlag
nUseFlag -> [UseFlag] -> [UseFlag]
forall a. a -> [a] -> [a]
:[UseFlag]
u)))
setSlotDep :: SlotDepend -> Dependency -> Dependency
setSlotDep :: SlotDepend -> Dependency -> Dependency
setSlotDep SlotDepend
n = (Atom -> Atom) -> Dependency -> Dependency
overAtom (\(Atom PackageName
pn DRange
dr (DAttr SlotDepend
_s [UseFlag]
u)) -> PackageName -> DRange -> DAttr -> Atom
Atom PackageName
pn DRange
dr (SlotDepend -> [UseFlag] -> DAttr
DAttr SlotDepend
n [UseFlag]
u))
mkUseDependency :: (Bool, Use) -> Dependency -> Dependency
mkUseDependency :: (Bool, Use) -> Dependency -> Dependency
mkUseDependency (Bool
b, Use
u) Dependency
d =
if Bool
b then Use -> Dependency -> Dependency -> Dependency
DependIfUse Use
u Dependency
d Dependency
empty_dependency else Use -> Dependency -> Dependency -> Dependency
DependIfUse Use
u Dependency
empty_dependency Dependency
d
overAtom :: (Atom -> Atom) -> Dependency -> Dependency
overAtom :: (Atom -> Atom) -> Dependency -> Dependency
overAtom Atom -> Atom
f (DependAllOf [Dependency]
d) = [Dependency] -> Dependency
DependAllOf ([Dependency] -> Dependency) -> [Dependency] -> Dependency
forall a b. (a -> b) -> a -> b
$ (Dependency -> Dependency) -> [Dependency] -> [Dependency]
forall a b. (a -> b) -> [a] -> [b]
map ((Atom -> Atom) -> Dependency -> Dependency
overAtom Atom -> Atom
f) [Dependency]
d
overAtom Atom -> Atom
f (DependAnyOf [Dependency]
d) = [Dependency] -> Dependency
DependAnyOf ([Dependency] -> Dependency) -> [Dependency] -> Dependency
forall a b. (a -> b) -> a -> b
$ (Dependency -> Dependency) -> [Dependency] -> [Dependency]
forall a b. (a -> b) -> [a] -> [b]
map ((Atom -> Atom) -> Dependency -> Dependency
overAtom Atom -> Atom
f) [Dependency]
d
overAtom Atom -> Atom
f (DependIfUse Use
u Dependency
d1 Dependency
d2) = Use -> Dependency -> Dependency -> Dependency
DependIfUse Use
u (Atom -> Atom
f (Atom -> Atom) -> Dependency -> Dependency
`overAtom` Dependency
d1) (Atom -> Atom
f (Atom -> Atom) -> Dependency -> Dependency
`overAtom` Dependency
d2)
overAtom Atom -> Atom
f (DependAtom Atom
a) = Atom -> Dependency
DependAtom (Atom -> Atom
f Atom
a)