{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}

module Cardano.Ledger.Genesis (
  EraGenesis (..),
  NoGenesis (..),
) where

import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
  FromCBOR (..),
  ToCBOR (..),
 )
import Cardano.Ledger.Core.Era (Era)
import Data.Kind (Type)

class Era era => EraGenesis era where
  type Genesis era :: Type
  type Genesis era = NoGenesis era

data NoGenesis era = NoGenesis
  deriving (NoGenesis era -> NoGenesis era -> Bool
forall era. NoGenesis era -> NoGenesis era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NoGenesis era -> NoGenesis era -> Bool
$c/= :: forall era. NoGenesis era -> NoGenesis era -> Bool
== :: NoGenesis era -> NoGenesis era -> Bool
$c== :: forall era. NoGenesis era -> NoGenesis era -> Bool
Eq, Int -> NoGenesis era -> ShowS
forall era. Int -> NoGenesis era -> ShowS
forall era. [NoGenesis era] -> ShowS
forall era. NoGenesis era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NoGenesis era] -> ShowS
$cshowList :: forall era. [NoGenesis era] -> ShowS
show :: NoGenesis era -> String
$cshow :: forall era. NoGenesis era -> String
showsPrec :: Int -> NoGenesis era -> ShowS
$cshowsPrec :: forall era. Int -> NoGenesis era -> ShowS
Show)

instance Era era => ToCBOR (NoGenesis era) where
  toCBOR :: NoGenesis era -> Encoding
toCBOR NoGenesis era
_ = forall a. ToCBOR a => a -> Encoding
toCBOR ()

instance Era era => FromCBOR (NoGenesis era) where
  fromCBOR :: forall s. Decoder s (NoGenesis era)
fromCBOR = forall era. NoGenesis era
NoGenesis forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall a s. FromCBOR a => Decoder s a
fromCBOR @()

instance Era era => EncCBOR (NoGenesis era)

instance Era era => DecCBOR (NoGenesis era)