module Hix.Managed.Data.Initial where

import Data.Aeson (FromJSON, ToJSON)
import Distribution.Pretty (Pretty (pretty))

import Hix.Class.EncodeNix (EncodeNix)

newtype Initial a =
  Initial a
  deriving stock (Initial a -> Initial a -> Bool
(Initial a -> Initial a -> Bool)
-> (Initial a -> Initial a -> Bool) -> Eq (Initial a)
forall a. Eq a => Initial a -> Initial a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => Initial a -> Initial a -> Bool
== :: Initial a -> Initial a -> Bool
$c/= :: forall a. Eq a => Initial a -> Initial a -> Bool
/= :: Initial a -> Initial a -> Bool
Eq, Int -> Initial a -> ShowS
[Initial a] -> ShowS
Initial a -> String
(Int -> Initial a -> ShowS)
-> (Initial a -> String)
-> ([Initial a] -> ShowS)
-> Show (Initial a)
forall a. Show a => Int -> Initial a -> ShowS
forall a. Show a => [Initial a] -> ShowS
forall a. Show a => Initial a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Initial a -> ShowS
showsPrec :: Int -> Initial a -> ShowS
$cshow :: forall a. Show a => Initial a -> String
show :: Initial a -> String
$cshowList :: forall a. Show a => [Initial a] -> ShowS
showList :: [Initial a] -> ShowS
Show, (forall x. Initial a -> Rep (Initial a) x)
-> (forall x. Rep (Initial a) x -> Initial a)
-> Generic (Initial a)
forall x. Rep (Initial a) x -> Initial a
forall x. Initial a -> Rep (Initial a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Initial a) x -> Initial a
forall a x. Initial a -> Rep (Initial a) x
$cfrom :: forall a x. Initial a -> Rep (Initial a) x
from :: forall x. Initial a -> Rep (Initial a) x
$cto :: forall a x. Rep (Initial a) x -> Initial a
to :: forall x. Rep (Initial a) x -> Initial a
Generic, (forall a b. (a -> b) -> Initial a -> Initial b)
-> (forall a b. a -> Initial b -> Initial a) -> Functor Initial
forall a b. a -> Initial b -> Initial a
forall a b. (a -> b) -> Initial a -> Initial b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Initial a -> Initial b
fmap :: forall a b. (a -> b) -> Initial a -> Initial b
$c<$ :: forall a b. a -> Initial b -> Initial a
<$ :: forall a b. a -> Initial b -> Initial a
Functor)
  deriving newtype (NonEmpty (Initial a) -> Initial a
Initial a -> Initial a -> Initial a
(Initial a -> Initial a -> Initial a)
-> (NonEmpty (Initial a) -> Initial a)
-> (forall b. Integral b => b -> Initial a -> Initial a)
-> Semigroup (Initial a)
forall b. Integral b => b -> Initial a -> Initial a
forall a. Semigroup a => NonEmpty (Initial a) -> Initial a
forall a. Semigroup a => Initial a -> Initial a -> Initial a
forall a b.
(Semigroup a, Integral b) =>
b -> Initial a -> Initial a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
$c<> :: forall a. Semigroup a => Initial a -> Initial a -> Initial a
<> :: Initial a -> Initial a -> Initial a
$csconcat :: forall a. Semigroup a => NonEmpty (Initial a) -> Initial a
sconcat :: NonEmpty (Initial a) -> Initial a
$cstimes :: forall a b.
(Semigroup a, Integral b) =>
b -> Initial a -> Initial a
stimes :: forall b. Integral b => b -> Initial a -> Initial a
Semigroup, Semigroup (Initial a)
Initial a
Semigroup (Initial a) =>
Initial a
-> (Initial a -> Initial a -> Initial a)
-> ([Initial a] -> Initial a)
-> Monoid (Initial a)
[Initial a] -> Initial a
Initial a -> Initial a -> Initial a
forall a.
Semigroup a =>
a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a. Monoid a => Semigroup (Initial a)
forall a. Monoid a => Initial a
forall a. Monoid a => [Initial a] -> Initial a
forall a. Monoid a => Initial a -> Initial a -> Initial a
$cmempty :: forall a. Monoid a => Initial a
mempty :: Initial a
$cmappend :: forall a. Monoid a => Initial a -> Initial a -> Initial a
mappend :: Initial a -> Initial a -> Initial a
$cmconcat :: forall a. Monoid a => [Initial a] -> Initial a
mconcat :: [Initial a] -> Initial a
Monoid, Maybe (Initial a)
Value -> Parser [Initial a]
Value -> Parser (Initial a)
(Value -> Parser (Initial a))
-> (Value -> Parser [Initial a])
-> Maybe (Initial a)
-> FromJSON (Initial a)
forall a. FromJSON a => Maybe (Initial a)
forall a. FromJSON a => Value -> Parser [Initial a]
forall a. FromJSON a => Value -> Parser (Initial a)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: forall a. FromJSON a => Value -> Parser (Initial a)
parseJSON :: Value -> Parser (Initial a)
$cparseJSONList :: forall a. FromJSON a => Value -> Parser [Initial a]
parseJSONList :: Value -> Parser [Initial a]
$comittedField :: forall a. FromJSON a => Maybe (Initial a)
omittedField :: Maybe (Initial a)
FromJSON, [Initial a] -> Value
[Initial a] -> Encoding
Initial a -> Bool
Initial a -> Value
Initial a -> Encoding
(Initial a -> Value)
-> (Initial a -> Encoding)
-> ([Initial a] -> Value)
-> ([Initial a] -> Encoding)
-> (Initial a -> Bool)
-> ToJSON (Initial a)
forall a. ToJSON a => [Initial a] -> Value
forall a. ToJSON a => [Initial a] -> Encoding
forall a. ToJSON a => Initial a -> Bool
forall a. ToJSON a => Initial a -> Value
forall a. ToJSON a => Initial a -> Encoding
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: forall a. ToJSON a => Initial a -> Value
toJSON :: Initial a -> Value
$ctoEncoding :: forall a. ToJSON a => Initial a -> Encoding
toEncoding :: Initial a -> Encoding
$ctoJSONList :: forall a. ToJSON a => [Initial a] -> Value
toJSONList :: [Initial a] -> Value
$ctoEncodingList :: forall a. ToJSON a => [Initial a] -> Encoding
toEncodingList :: [Initial a] -> Encoding
$comitField :: forall a. ToJSON a => Initial a -> Bool
omitField :: Initial a -> Bool
ToJSON, Initial a -> Expr
(Initial a -> Expr) -> EncodeNix (Initial a)
forall a. EncodeNix a => Initial a -> Expr
forall a. (a -> Expr) -> EncodeNix a
$cencodeNix :: forall a. EncodeNix a => Initial a -> Expr
encodeNix :: Initial a -> Expr
EncodeNix)

instance Pretty a => Pretty (Initial a) where
  pretty :: Initial a -> Doc
pretty (Initial a
a) = a -> Doc
forall a. Pretty a => a -> Doc
pretty a
a