module Hix.Managed.Cabal.Data.SourcePackage where

import Distribution.Pretty (Pretty (pretty))
import Distribution.Simple (Version)
import GHC.Exts (IsList)

import Hix.Class.Map (LookupMaybe, LookupMonoid, NMap, nPretty1, nPrettyWith)
import Hix.Data.Dep (Dep)
import Hix.Data.PackageName (PackageName)
import Hix.Pretty (prettyL)

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

instance NMap SourcePackageDeps Version [Dep] LookupMonoid where

instance Pretty SourcePackageDeps where
  pretty :: SourcePackageDeps -> Doc
pretty = ([Dep] -> Doc) -> SourcePackageDeps -> Doc
forall k map v sort.
(Pretty k, NMap map k v sort) =>
(v -> Doc) -> map -> Doc
nPrettyWith [Dep] -> Doc
forall (t :: * -> *) a. (Pretty a, Foldable t) => t a -> Doc
prettyL

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

instance NMap SourcePackages PackageName SourcePackageDeps LookupMaybe where

instance Pretty SourcePackages where
  pretty :: SourcePackages -> Doc
pretty = SourcePackages -> Doc
forall k v map sort.
(Pretty k, Pretty v, NMap map k v sort) =>
map -> Doc
nPretty1

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

instance NMap SourcePackageVersions PackageName [Version] LookupMaybe where

instance Pretty SourcePackageVersions where
  pretty :: SourcePackageVersions -> Doc
pretty = ([Version] -> Doc) -> SourcePackageVersions -> Doc
forall k map v sort.
(Pretty k, NMap map k v sort) =>
(v -> Doc) -> map -> Doc
nPrettyWith [Version] -> Doc
forall (t :: * -> *) a. (Pretty a, Foldable t) => t a -> Doc
prettyL