module Hix.Managed.Data.Envs where

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

import Hix.Class.EncodeNix (EncodeNix)
import Hix.Class.Map (LookupMonoid, NMap, nPretty1)
import Hix.Data.EnvName (EnvName)

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

instance NMap (Envs a) EnvName a LookupMonoid where

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