{-# LANGUAGE DataKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Mary.Rules.Ledger () where

import Cardano.Ledger.Core
import Cardano.Ledger.Mary.Era (MaryEra)
import Cardano.Ledger.Mary.Rules.Delegs ()
import Cardano.Ledger.Mary.Rules.Utxow ()
import Cardano.Ledger.Shelley.Rules (
  ShelleyDelegPredFailure,
  ShelleyDelegsPredFailure,
  ShelleyDelplPredFailure,
  ShelleyLedgerEvent,
  ShelleyLedgerPredFailure (..),
  ShelleyPoolPredFailure,
  ShelleyPpupPredFailure,
  ShelleyUtxoPredFailure,
  ShelleyUtxowPredFailure,
 )

type instance EraRuleFailure "LEDGER" MaryEra = ShelleyLedgerPredFailure MaryEra

instance InjectRuleFailure "LEDGER" ShelleyLedgerPredFailure MaryEra

instance InjectRuleFailure "LEDGER" ShelleyUtxowPredFailure MaryEra where
  injectFailure :: ShelleyUtxowPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "UTXOW" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyUtxowPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> ShelleyLedgerPredFailure era
UtxowFailure

instance InjectRuleFailure "LEDGER" ShelleyUtxoPredFailure MaryEra where
  injectFailure :: ShelleyUtxoPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "UTXOW" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyUtxowPredFailure MaryEra -> ShelleyLedgerPredFailure MaryEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> ShelleyLedgerPredFailure era
UtxowFailure (ShelleyUtxowPredFailure MaryEra
 -> ShelleyLedgerPredFailure MaryEra)
-> (ShelleyUtxoPredFailure MaryEra
    -> ShelleyUtxowPredFailure MaryEra)
-> ShelleyUtxoPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure MaryEra -> EraRuleFailure "UTXOW" MaryEra
ShelleyUtxoPredFailure MaryEra -> ShelleyUtxowPredFailure MaryEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" ShelleyPpupPredFailure MaryEra where
  injectFailure :: ShelleyPpupPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "UTXOW" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyUtxowPredFailure MaryEra -> ShelleyLedgerPredFailure MaryEra
forall era.
PredicateFailure (EraRule "UTXOW" era)
-> ShelleyLedgerPredFailure era
UtxowFailure (ShelleyUtxowPredFailure MaryEra
 -> ShelleyLedgerPredFailure MaryEra)
-> (ShelleyPpupPredFailure MaryEra
    -> ShelleyUtxowPredFailure MaryEra)
-> ShelleyPpupPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPpupPredFailure MaryEra -> EraRuleFailure "UTXOW" MaryEra
ShelleyPpupPredFailure MaryEra -> ShelleyUtxowPredFailure MaryEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" ShelleyDelegsPredFailure MaryEra where
  injectFailure :: ShelleyDelegsPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "DELEGS" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyDelegsPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
forall era.
PredicateFailure (EraRule "DELEGS" era)
-> ShelleyLedgerPredFailure era
DelegsFailure

instance InjectRuleFailure "LEDGER" ShelleyDelplPredFailure MaryEra where
  injectFailure :: ShelleyDelplPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "DELEGS" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyDelegsPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall era.
PredicateFailure (EraRule "DELEGS" era)
-> ShelleyLedgerPredFailure era
DelegsFailure (ShelleyDelegsPredFailure MaryEra
 -> ShelleyLedgerPredFailure MaryEra)
-> (ShelleyDelplPredFailure MaryEra
    -> ShelleyDelegsPredFailure MaryEra)
-> ShelleyDelplPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyDelplPredFailure MaryEra -> EraRuleFailure "DELEGS" MaryEra
ShelleyDelplPredFailure MaryEra -> ShelleyDelegsPredFailure MaryEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" ShelleyPoolPredFailure MaryEra where
  injectFailure :: ShelleyPoolPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "DELEGS" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyDelegsPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall era.
PredicateFailure (EraRule "DELEGS" era)
-> ShelleyLedgerPredFailure era
DelegsFailure (ShelleyDelegsPredFailure MaryEra
 -> ShelleyLedgerPredFailure MaryEra)
-> (ShelleyPoolPredFailure MaryEra
    -> ShelleyDelegsPredFailure MaryEra)
-> ShelleyPoolPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPoolPredFailure MaryEra -> EraRuleFailure "DELEGS" MaryEra
ShelleyPoolPredFailure MaryEra -> ShelleyDelegsPredFailure MaryEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "LEDGER" ShelleyDelegPredFailure MaryEra where
  injectFailure :: ShelleyDelegPredFailure MaryEra -> EraRuleFailure "LEDGER" MaryEra
injectFailure = PredicateFailure (EraRule "DELEGS" MaryEra)
-> ShelleyLedgerPredFailure MaryEra
ShelleyDelegsPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall era.
PredicateFailure (EraRule "DELEGS" era)
-> ShelleyLedgerPredFailure era
DelegsFailure (ShelleyDelegsPredFailure MaryEra
 -> ShelleyLedgerPredFailure MaryEra)
-> (ShelleyDelegPredFailure MaryEra
    -> ShelleyDelegsPredFailure MaryEra)
-> ShelleyDelegPredFailure MaryEra
-> ShelleyLedgerPredFailure MaryEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyDelegPredFailure MaryEra -> EraRuleFailure "DELEGS" MaryEra
ShelleyDelegPredFailure MaryEra -> ShelleyDelegsPredFailure MaryEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

type instance EraRuleEvent "LEDGER" MaryEra = ShelleyLedgerEvent MaryEra