module Hix.Managed.Cabal.Data.Packages where

import GHC.Exts (IsList)

import Hix.Data.PackageId (PackageId)
import Hix.Managed.Cabal.Data.SourcePackage (SourcePackages)

newtype InstalledPackages =
  InstalledPackages [(PackageId, [PackageId])]
  deriving stock (InstalledPackages -> InstalledPackages -> Bool
(InstalledPackages -> InstalledPackages -> Bool)
-> (InstalledPackages -> InstalledPackages -> Bool)
-> Eq InstalledPackages
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: InstalledPackages -> InstalledPackages -> Bool
== :: InstalledPackages -> InstalledPackages -> Bool
$c/= :: InstalledPackages -> InstalledPackages -> Bool
/= :: InstalledPackages -> InstalledPackages -> Bool
Eq, Int -> InstalledPackages -> ShowS
[InstalledPackages] -> ShowS
InstalledPackages -> String
(Int -> InstalledPackages -> ShowS)
-> (InstalledPackages -> String)
-> ([InstalledPackages] -> ShowS)
-> Show InstalledPackages
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> InstalledPackages -> ShowS
showsPrec :: Int -> InstalledPackages -> ShowS
$cshow :: InstalledPackages -> String
show :: InstalledPackages -> String
$cshowList :: [InstalledPackages] -> ShowS
showList :: [InstalledPackages] -> ShowS
Show, (forall x. InstalledPackages -> Rep InstalledPackages x)
-> (forall x. Rep InstalledPackages x -> InstalledPackages)
-> Generic InstalledPackages
forall x. Rep InstalledPackages x -> InstalledPackages
forall x. InstalledPackages -> Rep InstalledPackages x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. InstalledPackages -> Rep InstalledPackages x
from :: forall x. InstalledPackages -> Rep InstalledPackages x
$cto :: forall x. Rep InstalledPackages x -> InstalledPackages
to :: forall x. Rep InstalledPackages x -> InstalledPackages
Generic)
  deriving newtype (Int -> [Item InstalledPackages] -> InstalledPackages
[Item InstalledPackages] -> InstalledPackages
InstalledPackages -> [Item InstalledPackages]
([Item InstalledPackages] -> InstalledPackages)
-> (Int -> [Item InstalledPackages] -> InstalledPackages)
-> (InstalledPackages -> [Item InstalledPackages])
-> IsList InstalledPackages
forall l.
([Item l] -> l)
-> (Int -> [Item l] -> l) -> (l -> [Item l]) -> IsList l
$cfromList :: [Item InstalledPackages] -> InstalledPackages
fromList :: [Item InstalledPackages] -> InstalledPackages
$cfromListN :: Int -> [Item InstalledPackages] -> InstalledPackages
fromListN :: Int -> [Item InstalledPackages] -> InstalledPackages
$ctoList :: InstalledPackages -> [Item InstalledPackages]
toList :: InstalledPackages -> [Item InstalledPackages]
IsList, NonEmpty InstalledPackages -> InstalledPackages
InstalledPackages -> InstalledPackages -> InstalledPackages
(InstalledPackages -> InstalledPackages -> InstalledPackages)
-> (NonEmpty InstalledPackages -> InstalledPackages)
-> (forall b.
    Integral b =>
    b -> InstalledPackages -> InstalledPackages)
-> Semigroup InstalledPackages
forall b. Integral b => b -> InstalledPackages -> InstalledPackages
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: InstalledPackages -> InstalledPackages -> InstalledPackages
<> :: InstalledPackages -> InstalledPackages -> InstalledPackages
$csconcat :: NonEmpty InstalledPackages -> InstalledPackages
sconcat :: NonEmpty InstalledPackages -> InstalledPackages
$cstimes :: forall b. Integral b => b -> InstalledPackages -> InstalledPackages
stimes :: forall b. Integral b => b -> InstalledPackages -> InstalledPackages
Semigroup, Semigroup InstalledPackages
InstalledPackages
Semigroup InstalledPackages =>
InstalledPackages
-> (InstalledPackages -> InstalledPackages -> InstalledPackages)
-> ([InstalledPackages] -> InstalledPackages)
-> Monoid InstalledPackages
[InstalledPackages] -> InstalledPackages
InstalledPackages -> InstalledPackages -> InstalledPackages
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
$cmempty :: InstalledPackages
mempty :: InstalledPackages
$cmappend :: InstalledPackages -> InstalledPackages -> InstalledPackages
mappend :: InstalledPackages -> InstalledPackages -> InstalledPackages
$cmconcat :: [InstalledPackages] -> InstalledPackages
mconcat :: [InstalledPackages] -> InstalledPackages
Monoid)

-- | Mock data for package indexes for the solver.
--
-- Installed packages should not contain local packages, since they have fixed dependency versions.
-- Instead, they should be included in the available packages, but this is done automatically by the @SolveResources@
-- initializer, so these here correspond only to Hackage packages.
data GhcPackages =
  GhcPackages {
    GhcPackages -> InstalledPackages
installed :: InstalledPackages,
    GhcPackages -> SourcePackages
available :: SourcePackages
  }
  deriving stock (GhcPackages -> GhcPackages -> Bool
(GhcPackages -> GhcPackages -> Bool)
-> (GhcPackages -> GhcPackages -> Bool) -> Eq GhcPackages
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GhcPackages -> GhcPackages -> Bool
== :: GhcPackages -> GhcPackages -> Bool
$c/= :: GhcPackages -> GhcPackages -> Bool
/= :: GhcPackages -> GhcPackages -> Bool
Eq, Int -> GhcPackages -> ShowS
[GhcPackages] -> ShowS
GhcPackages -> String
(Int -> GhcPackages -> ShowS)
-> (GhcPackages -> String)
-> ([GhcPackages] -> ShowS)
-> Show GhcPackages
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GhcPackages -> ShowS
showsPrec :: Int -> GhcPackages -> ShowS
$cshow :: GhcPackages -> String
show :: GhcPackages -> String
$cshowList :: [GhcPackages] -> ShowS
showList :: [GhcPackages] -> ShowS
Show, (forall x. GhcPackages -> Rep GhcPackages x)
-> (forall x. Rep GhcPackages x -> GhcPackages)
-> Generic GhcPackages
forall x. Rep GhcPackages x -> GhcPackages
forall x. GhcPackages -> Rep GhcPackages x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. GhcPackages -> Rep GhcPackages x
from :: forall x. GhcPackages -> Rep GhcPackages x
$cto :: forall x. Rep GhcPackages x -> GhcPackages
to :: forall x. Rep GhcPackages x -> GhcPackages
Generic)