module Hix.Managed.Cabal.Config where

import qualified Data.Set as Set

import qualified Hix.Data.PackageId
import Hix.Data.PackageId (PackageId)
import Hix.Data.PackageName (PackageName)
import Hix.Managed.Data.Mutable (MutableDep, depName)

nonReinstallableNames :: Set PackageName
nonReinstallableNames :: Set PackageName
nonReinstallableNames =
  [
    Item (Set PackageName)
PackageName
"base",
    Item (Set PackageName)
PackageName
"ghc-bignum",
    Item (Set PackageName)
PackageName
"ghc-prim",
    Item (Set PackageName)
PackageName
"ghc",
    Item (Set PackageName)
PackageName
"integer-gmp",
    Item (Set PackageName)
PackageName
"integer-simple",
    Item (Set PackageName)
PackageName
"template-haskell"
  ]

isNonReinstallable :: PackageName -> Bool
isNonReinstallable :: PackageName -> Bool
isNonReinstallable = (PackageName -> Set PackageName -> Bool)
-> Set PackageName -> PackageName -> Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip PackageName -> Set PackageName -> Bool
forall a. Ord a => a -> Set a -> Bool
Set.member Set PackageName
nonReinstallableNames

isReinstallable :: PackageName -> Bool
isReinstallable :: PackageName -> Bool
isReinstallable = Bool -> Bool
not (Bool -> Bool) -> (PackageName -> Bool) -> PackageName -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageName -> Bool
isNonReinstallable

isNonReinstallableId :: PackageId -> Bool
isNonReinstallableId :: PackageId -> Bool
isNonReinstallableId PackageId
package = PackageName -> Bool
isNonReinstallable PackageId
package.name

isReinstallableId :: PackageId -> Bool
isReinstallableId :: PackageId -> Bool
isReinstallableId PackageId
package = PackageName -> Bool
isReinstallable PackageId
package.name

isNonReinstallableDep :: MutableDep -> Bool
isNonReinstallableDep :: MutableDep -> Bool
isNonReinstallableDep = PackageName -> Bool
isNonReinstallable (PackageName -> Bool)
-> (MutableDep -> PackageName) -> MutableDep -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MutableDep -> PackageName
depName