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

module Cardano.Ledger.Dijkstra.Rules.Utxow () where

import Cardano.Ledger.Allegra.Rules (AllegraUtxoPredFailure)
import Cardano.Ledger.Alonzo.Rules (
  AlonzoUtxoPredFailure,
  AlonzoUtxosPredFailure,
  AlonzoUtxowEvent,
  AlonzoUtxowPredFailure,
 )
import Cardano.Ledger.Babbage.Rules (BabbageUtxoPredFailure, BabbageUtxowPredFailure)
import Cardano.Ledger.Conway.Rules (
  ConwayUtxoPredFailure,
  ConwayUtxosPredFailure,
  ConwayUtxowPredFailure (..),
  alonzoToConwayUtxowPredFailure,
  babbageToConwayUtxowPredFailure,
  shelleyToConwayUtxowPredFailure,
 )
import Cardano.Ledger.Dijkstra.Core (EraRuleEvent, EraRuleFailure, InjectRuleFailure (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Rules.Utxo ()
import Cardano.Ledger.Shelley.Rules (ShelleyUtxoPredFailure, ShelleyUtxowPredFailure)

type instance EraRuleFailure "UTXOW" DijkstraEra = ConwayUtxowPredFailure DijkstraEra

type instance EraRuleEvent "UTXOW" DijkstraEra = AlonzoUtxowEvent DijkstraEra

instance InjectRuleFailure "UTXOW" ConwayUtxowPredFailure DijkstraEra

instance InjectRuleFailure "UTXOW" BabbageUtxowPredFailure DijkstraEra where
  injectFailure :: BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = BabbageUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
BabbageUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
BabbageUtxowPredFailure era -> ConwayUtxowPredFailure era
babbageToConwayUtxowPredFailure

instance InjectRuleFailure "UTXOW" AlonzoUtxowPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = AlonzoUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
AlonzoUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
AlonzoUtxowPredFailure era -> ConwayUtxowPredFailure era
alonzoToConwayUtxowPredFailure

instance InjectRuleFailure "UTXOW" ShelleyUtxowPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = ShelleyUtxowPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
ShelleyUtxowPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
ShelleyUtxowPredFailure era -> ConwayUtxowPredFailure era
shelleyToConwayUtxowPredFailure

instance InjectRuleFailure "UTXOW" ConwayUtxoPredFailure DijkstraEra where
  injectFailure :: ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (ConwayUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" BabbageUtxoPredFailure DijkstraEra where
  injectFailure :: BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (BabbageUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> BabbageUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BabbageUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
BabbageUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AlonzoUtxoPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (AlonzoUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AlonzoUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (AlonzoUtxosPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" ConwayUtxosPredFailure DijkstraEra where
  injectFailure :: ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (ConwayUtxosPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> ConwayUtxosPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ConwayUtxosPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" ShelleyUtxoPredFailure DijkstraEra where
  injectFailure :: ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (ShelleyUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> ShelleyUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
ShelleyUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "UTXOW" AllegraUtxoPredFailure DijkstraEra where
  injectFailure :: AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXOW" DijkstraEra
injectFailure = PredicateFailure (EraRule "UTXO" DijkstraEra)
-> ConwayUtxowPredFailure DijkstraEra
ConwayUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "UTXO" era) -> ConwayUtxowPredFailure era
UtxoFailure (ConwayUtxoPredFailure DijkstraEra
 -> ConwayUtxowPredFailure DijkstraEra)
-> (AllegraUtxoPredFailure DijkstraEra
    -> ConwayUtxoPredFailure DijkstraEra)
-> AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxowPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AllegraUtxoPredFailure DijkstraEra
-> EraRuleFailure "UTXO" DijkstraEra
AllegraUtxoPredFailure DijkstraEra
-> ConwayUtxoPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure