module Hix.Managed.Data.Packages where

import Data.Aeson (FromJSON)
import Distribution.Pretty (Pretty (pretty))
import GHC.Exts (IsList)

import Hix.Class.EncodeNix (EncodeNix)
import Hix.Class.Map (LookupMaybe, LookupMonoid, NMap, nPretty, nPretty1)
import Hix.Data.PackageName (LocalPackage, PackageName)

newtype Packages a =
  Packages (Map LocalPackage a)
  deriving stock (Packages a -> Packages a -> Bool
(Packages a -> Packages a -> Bool)
-> (Packages a -> Packages a -> Bool) -> Eq (Packages a)
forall a. Eq a => Packages a -> Packages a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Packages a -> Packages a -> Bool
== :: Packages a -> Packages a -> Bool
$c/= :: forall a. Eq a => Packages a -> Packages a -> Bool
/= :: Packages a -> Packages a -> Bool
Eq, Int -> Packages a -> ShowS
[Packages a] -> ShowS
Packages a -> String
(Int -> Packages a -> ShowS)
-> (Packages a -> String)
-> ([Packages a] -> ShowS)
-> Show (Packages a)
forall a. Show a => Int -> Packages a -> ShowS
forall a. Show a => [Packages a] -> ShowS
forall a. Show a => Packages a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Packages a -> ShowS
showsPrec :: Int -> Packages a -> ShowS
$cshow :: forall a. Show a => Packages a -> String
show :: Packages a -> String
$cshowList :: forall a. Show a => [Packages a] -> ShowS
showList :: [Packages a] -> ShowS
Show, (forall x. Packages a -> Rep (Packages a) x)
-> (forall x. Rep (Packages a) x -> Packages a)
-> Generic (Packages a)
forall x. Rep (Packages a) x -> Packages a
forall x. Packages a -> Rep (Packages a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Packages a) x -> Packages a
forall a x. Packages a -> Rep (Packages a) x
$cfrom :: forall a x. Packages a -> Rep (Packages a) x
from :: forall x. Packages a -> Rep (Packages a) x
$cto :: forall a x. Rep (Packages a) x -> Packages a
to :: forall x. Rep (Packages a) x -> Packages a
Generic)
  deriving newtype (Maybe (Packages a)
Value -> Parser [Packages a]
Value -> Parser (Packages a)
(Value -> Parser (Packages a))
-> (Value -> Parser [Packages a])
-> Maybe (Packages a)
-> FromJSON (Packages a)
forall a. FromJSON a => Maybe (Packages a)
forall a. FromJSON a => Value -> Parser [Packages a]
forall a. FromJSON a => Value -> Parser (Packages a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (Packages a)
parseJSON :: Value -> Parser (Packages a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [Packages a]
parseJSONList :: Value -> Parser [Packages a]
$comittedField :: forall a. FromJSON a => Maybe (Packages a)
omittedField :: Maybe (Packages a)
FromJSON, NonEmpty (Packages a) -> Packages a
Packages a -> Packages a -> Packages a
(Packages a -> Packages a -> Packages a)
-> (NonEmpty (Packages a) -> Packages a)
-> (forall b. Integral b => b -> Packages a -> Packages a)
-> Semigroup (Packages a)
forall b. Integral b => b -> Packages a -> Packages a
forall a. NonEmpty (Packages a) -> Packages a
forall a. Packages a -> Packages a -> Packages a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall a b. Integral b => b -> Packages a -> Packages a
$c<> :: forall a. Packages a -> Packages a -> Packages a
<> :: Packages a -> Packages a -> Packages a
$csconcat :: forall a. NonEmpty (Packages a) -> Packages a
sconcat :: NonEmpty (Packages a) -> Packages a
$cstimes :: forall a b. Integral b => b -> Packages a -> Packages a
stimes :: forall b. Integral b => b -> Packages a -> Packages a
Semigroup, Semigroup (Packages a)
Packages a
Semigroup (Packages a) =>
Packages a
-> (Packages a -> Packages a -> Packages a)
-> ([Packages a] -> Packages a)
-> Monoid (Packages a)
[Packages a] -> Packages a
Packages a -> Packages a -> Packages a
forall a. Semigroup (Packages a)
forall a. Packages a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. [Packages a] -> Packages a
forall a. Packages a -> Packages a -> Packages a
$cmempty :: forall a. Packages a
mempty :: Packages a
$cmappend :: forall a. Packages a -> Packages a -> Packages a
mappend :: Packages a -> Packages a -> Packages a
$cmconcat :: forall a. [Packages a] -> Packages a
mconcat :: [Packages a] -> Packages a
Monoid, Int -> [Item (Packages a)] -> Packages a
[Item (Packages a)] -> Packages a
Packages a -> [Item (Packages a)]
([Item (Packages a)] -> Packages a)
-> (Int -> [Item (Packages a)] -> Packages a)
-> (Packages a -> [Item (Packages a)])
-> IsList (Packages a)
forall a. Int -> [Item (Packages a)] -> Packages a
forall a. [Item (Packages a)] -> Packages a
forall a. Packages a -> [Item (Packages a)]
forall l.
([Item l] -> l)
-> (Int -> [Item l] -> l) -> (l -> [Item l]) -> IsList l
$cfromList :: forall a. [Item (Packages a)] -> Packages a
fromList :: [Item (Packages a)] -> Packages a
$cfromListN :: forall a. Int -> [Item (Packages a)] -> Packages a
fromListN :: Int -> [Item (Packages a)] -> Packages a
$ctoList :: forall a. Packages a -> [Item (Packages a)]
toList :: Packages a -> [Item (Packages a)]
IsList, Packages a -> Expr
(Packages a -> Expr) -> EncodeNix (Packages a)
forall a. EncodeNix a => Packages a -> Expr
forall a. (a -> Expr) -> EncodeNix a
$cencodeNix :: forall a. EncodeNix a => Packages a -> Expr
encodeNix :: Packages a -> Expr
EncodeNix)

instance NMap (Packages a) LocalPackage a LookupMonoid where

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

newtype Deps a =
  Deps (Map PackageName a)
  deriving stock (Deps a -> Deps a -> Bool
(Deps a -> Deps a -> Bool)
-> (Deps a -> Deps a -> Bool) -> Eq (Deps a)
forall a. Eq a => Deps a -> Deps a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Deps a -> Deps a -> Bool
== :: Deps a -> Deps a -> Bool
$c/= :: forall a. Eq a => Deps a -> Deps a -> Bool
/= :: Deps a -> Deps a -> Bool
Eq, Int -> Deps a -> ShowS
[Deps a] -> ShowS
Deps a -> String
(Int -> Deps a -> ShowS)
-> (Deps a -> String) -> ([Deps a] -> ShowS) -> Show (Deps a)
forall a. Show a => Int -> Deps a -> ShowS
forall a. Show a => [Deps a] -> ShowS
forall a. Show a => Deps a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Deps a -> ShowS
showsPrec :: Int -> Deps a -> ShowS
$cshow :: forall a. Show a => Deps a -> String
show :: Deps a -> String
$cshowList :: forall a. Show a => [Deps a] -> ShowS
showList :: [Deps a] -> ShowS
Show, (forall x. Deps a -> Rep (Deps a) x)
-> (forall x. Rep (Deps a) x -> Deps a) -> Generic (Deps a)
forall x. Rep (Deps a) x -> Deps a
forall x. Deps a -> Rep (Deps a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Deps a) x -> Deps a
forall a x. Deps a -> Rep (Deps a) x
$cfrom :: forall a x. Deps a -> Rep (Deps a) x
from :: forall x. Deps a -> Rep (Deps a) x
$cto :: forall a x. Rep (Deps a) x -> Deps a
to :: forall x. Rep (Deps a) x -> Deps a
Generic)
  deriving newtype (Maybe (Deps a)
Value -> Parser [Deps a]
Value -> Parser (Deps a)
(Value -> Parser (Deps a))
-> (Value -> Parser [Deps a])
-> Maybe (Deps a)
-> FromJSON (Deps a)
forall a. FromJSON a => Maybe (Deps a)
forall a. FromJSON a => Value -> Parser [Deps a]
forall a. FromJSON a => Value -> Parser (Deps a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (Deps a)
parseJSON :: Value -> Parser (Deps a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [Deps a]
parseJSONList :: Value -> Parser [Deps a]
$comittedField :: forall a. FromJSON a => Maybe (Deps a)
omittedField :: Maybe (Deps a)
FromJSON, NonEmpty (Deps a) -> Deps a
Deps a -> Deps a -> Deps a
(Deps a -> Deps a -> Deps a)
-> (NonEmpty (Deps a) -> Deps a)
-> (forall b. Integral b => b -> Deps a -> Deps a)
-> Semigroup (Deps a)
forall b. Integral b => b -> Deps a -> Deps a
forall a. NonEmpty (Deps a) -> Deps a
forall a. Deps a -> Deps a -> Deps a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall a b. Integral b => b -> Deps a -> Deps a
$c<> :: forall a. Deps a -> Deps a -> Deps a
<> :: Deps a -> Deps a -> Deps a
$csconcat :: forall a. NonEmpty (Deps a) -> Deps a
sconcat :: NonEmpty (Deps a) -> Deps a
$cstimes :: forall a b. Integral b => b -> Deps a -> Deps a
stimes :: forall b. Integral b => b -> Deps a -> Deps a
Semigroup, Semigroup (Deps a)
Deps a
Semigroup (Deps a) =>
Deps a
-> (Deps a -> Deps a -> Deps a)
-> ([Deps a] -> Deps a)
-> Monoid (Deps a)
[Deps a] -> Deps a
Deps a -> Deps a -> Deps a
forall a. Semigroup (Deps a)
forall a. Deps a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. [Deps a] -> Deps a
forall a. Deps a -> Deps a -> Deps a
$cmempty :: forall a. Deps a
mempty :: Deps a
$cmappend :: forall a. Deps a -> Deps a -> Deps a
mappend :: Deps a -> Deps a -> Deps a
$cmconcat :: forall a. [Deps a] -> Deps a
mconcat :: [Deps a] -> Deps a
Monoid, Int -> [Item (Deps a)] -> Deps a
[Item (Deps a)] -> Deps a
Deps a -> [Item (Deps a)]
([Item (Deps a)] -> Deps a)
-> (Int -> [Item (Deps a)] -> Deps a)
-> (Deps a -> [Item (Deps a)])
-> IsList (Deps a)
forall a. Int -> [Item (Deps a)] -> Deps a
forall a. [Item (Deps a)] -> Deps a
forall a. Deps a -> [Item (Deps a)]
forall l.
([Item l] -> l)
-> (Int -> [Item l] -> l) -> (l -> [Item l]) -> IsList l
$cfromList :: forall a. [Item (Deps a)] -> Deps a
fromList :: [Item (Deps a)] -> Deps a
$cfromListN :: forall a. Int -> [Item (Deps a)] -> Deps a
fromListN :: Int -> [Item (Deps a)] -> Deps a
$ctoList :: forall a. Deps a -> [Item (Deps a)]
toList :: Deps a -> [Item (Deps a)]
IsList, Deps a -> Expr
(Deps a -> Expr) -> EncodeNix (Deps a)
forall a. EncodeNix a => Deps a -> Expr
forall a. (a -> Expr) -> EncodeNix a
$cencodeNix :: forall a. EncodeNix a => Deps a -> Expr
encodeNix :: Deps a -> Expr
EncodeNix)

instance NMap (Deps a) PackageName a LookupMaybe where

instance Pretty a => Pretty (Deps a) where
  pretty :: Deps a -> Doc
pretty = Deps a -> Doc
forall k v map sort.
(Pretty k, Pretty v, NMap map k v sort) =>
map -> Doc
nPretty