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

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

import Cardano.Ledger.Alonzo.Rules (AlonzoUtxosEvent, AlonzoUtxosPredFailure)
import Cardano.Ledger.Conway.Rules (
  ConwayUtxosEvent,
  ConwayUtxosPredFailure,
  alonzoToConwayUtxosEvent,
  alonzoToConwayUtxosPredFailure,
 )
import Cardano.Ledger.Dijkstra.Core (
  EraRuleEvent,
  EraRuleFailure,
  InjectRuleEvent (..),
  InjectRuleFailure (..),
 )
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)

type instance EraRuleFailure "UTXOS" DijkstraEra = ConwayUtxosPredFailure DijkstraEra

type instance EraRuleEvent "UTXOS" DijkstraEra = ConwayUtxosEvent DijkstraEra

instance InjectRuleFailure "UTXOS" ConwayUtxosPredFailure DijkstraEra

instance InjectRuleEvent "UTXOS" ConwayUtxosEvent DijkstraEra

instance InjectRuleFailure "UTXOS" AlonzoUtxosPredFailure DijkstraEra where
  injectFailure :: AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOS" DijkstraEra
injectFailure = AlonzoUtxosPredFailure DijkstraEra
-> EraRuleFailure "UTXOS" DijkstraEra
AlonzoUtxosPredFailure DijkstraEra
-> ConwayUtxosPredFailure DijkstraEra
forall era.
(EraRuleFailure "PPUP" era ~ VoidEraRule "PPUP" era) =>
AlonzoUtxosPredFailure era -> ConwayUtxosPredFailure era
alonzoToConwayUtxosPredFailure

instance InjectRuleEvent "UTXOS" AlonzoUtxosEvent DijkstraEra where
  injectEvent :: AlonzoUtxosEvent DijkstraEra -> EraRuleEvent "UTXOS" DijkstraEra
injectEvent = AlonzoUtxosEvent DijkstraEra -> EraRuleEvent "UTXOS" DijkstraEra
AlonzoUtxosEvent DijkstraEra -> ConwayUtxosEvent DijkstraEra
forall era.
(EraRuleEvent "PPUP" era ~ VoidEraRule "PPUP" era) =>
AlonzoUtxosEvent era -> ConwayUtxosEvent era
alonzoToConwayUtxosEvent