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

module Cardano.Ledger.Dijkstra.Rules () where

import Cardano.Ledger.Conway.Rules (
  ConwayEpochEvent (..),
  ConwayHardForkEvent,
  ConwayNewEpochEvent (..),
 )
import Cardano.Ledger.Dijkstra.Core (EraRuleEvent, InjectRuleEvent (..))
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Rules.Bbody ()
import Cardano.Ledger.Dijkstra.Rules.Cert ()
import Cardano.Ledger.Dijkstra.Rules.Certs ()
import Cardano.Ledger.Dijkstra.Rules.Deleg ()
import Cardano.Ledger.Dijkstra.Rules.Gov ()
import Cardano.Ledger.Dijkstra.Rules.GovCert ()
import Cardano.Ledger.Dijkstra.Rules.Ledger ()
import Cardano.Ledger.Dijkstra.Rules.Ledgers ()
import Cardano.Ledger.Dijkstra.Rules.Pool ()
import Cardano.Ledger.Dijkstra.Rules.Utxo ()
import Cardano.Ledger.Dijkstra.Rules.Utxos ()
import Cardano.Ledger.Dijkstra.Rules.Utxow ()
import Cardano.Ledger.Shelley.Rules (ShelleyTickEvent (..))

type instance EraRuleEvent "TICK" DijkstraEra = ShelleyTickEvent DijkstraEra

type instance EraRuleEvent "NEWEPOCH" DijkstraEra = ConwayNewEpochEvent DijkstraEra

type instance EraRuleEvent "EPOCH" DijkstraEra = ConwayEpochEvent DijkstraEra

type instance EraRuleEvent "HARDFORK" DijkstraEra = ConwayHardForkEvent DijkstraEra

instance InjectRuleEvent "TICK" ConwayNewEpochEvent DijkstraEra where
  injectEvent :: ConwayNewEpochEvent DijkstraEra -> EraRuleEvent "TICK" DijkstraEra
injectEvent = ConwayNewEpochEvent DijkstraEra -> EraRuleEvent "TICK" DijkstraEra
Event (EraRule "NEWEPOCH" DijkstraEra)
-> ShelleyTickEvent DijkstraEra
forall era. Event (EraRule "NEWEPOCH" era) -> ShelleyTickEvent era
TickNewEpochEvent

instance InjectRuleEvent "TICK" ConwayEpochEvent DijkstraEra where
  injectEvent :: ConwayEpochEvent DijkstraEra -> EraRuleEvent "TICK" DijkstraEra
injectEvent = ConwayNewEpochEvent DijkstraEra -> ShelleyTickEvent DijkstraEra
Event (EraRule "NEWEPOCH" DijkstraEra)
-> ShelleyTickEvent DijkstraEra
forall era. Event (EraRule "NEWEPOCH" era) -> ShelleyTickEvent era
TickNewEpochEvent (ConwayNewEpochEvent DijkstraEra -> ShelleyTickEvent DijkstraEra)
-> (ConwayEpochEvent DijkstraEra
    -> ConwayNewEpochEvent DijkstraEra)
-> ConwayEpochEvent DijkstraEra
-> ShelleyTickEvent DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayEpochEvent DijkstraEra -> EraRuleEvent "NEWEPOCH" DijkstraEra
ConwayEpochEvent DijkstraEra -> ConwayNewEpochEvent DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleEvent rule t era =>
t era -> EraRuleEvent rule era
injectEvent

instance InjectRuleEvent "TICK" ConwayHardForkEvent DijkstraEra where
  injectEvent :: ConwayHardForkEvent DijkstraEra -> EraRuleEvent "TICK" DijkstraEra
injectEvent = ConwayNewEpochEvent DijkstraEra -> ShelleyTickEvent DijkstraEra
Event (EraRule "NEWEPOCH" DijkstraEra)
-> ShelleyTickEvent DijkstraEra
forall era. Event (EraRule "NEWEPOCH" era) -> ShelleyTickEvent era
TickNewEpochEvent (ConwayNewEpochEvent DijkstraEra -> ShelleyTickEvent DijkstraEra)
-> (ConwayHardForkEvent DijkstraEra
    -> ConwayNewEpochEvent DijkstraEra)
-> ConwayHardForkEvent DijkstraEra
-> ShelleyTickEvent DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayHardForkEvent DijkstraEra
-> EraRuleEvent "NEWEPOCH" DijkstraEra
ConwayHardForkEvent DijkstraEra -> ConwayNewEpochEvent DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleEvent rule t era =>
t era -> EraRuleEvent rule era
injectEvent

instance InjectRuleEvent "NEWEPOCH" ConwayEpochEvent DijkstraEra where
  injectEvent :: ConwayEpochEvent DijkstraEra -> EraRuleEvent "NEWEPOCH" DijkstraEra
injectEvent = ConwayEpochEvent DijkstraEra -> EraRuleEvent "NEWEPOCH" DijkstraEra
Event (EraRule "EPOCH" DijkstraEra)
-> ConwayNewEpochEvent DijkstraEra
forall era. Event (EraRule "EPOCH" era) -> ConwayNewEpochEvent era
EpochEvent

instance InjectRuleEvent "NEWEPOCH" ConwayHardForkEvent DijkstraEra where
  injectEvent :: ConwayHardForkEvent DijkstraEra
-> EraRuleEvent "NEWEPOCH" DijkstraEra
injectEvent = ConwayEpochEvent DijkstraEra -> ConwayNewEpochEvent DijkstraEra
Event (EraRule "EPOCH" DijkstraEra)
-> ConwayNewEpochEvent DijkstraEra
forall era. Event (EraRule "EPOCH" era) -> ConwayNewEpochEvent era
EpochEvent (ConwayEpochEvent DijkstraEra -> ConwayNewEpochEvent DijkstraEra)
-> (ConwayHardForkEvent DijkstraEra
    -> ConwayEpochEvent DijkstraEra)
-> ConwayHardForkEvent DijkstraEra
-> ConwayNewEpochEvent DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayHardForkEvent DijkstraEra -> EraRuleEvent "EPOCH" DijkstraEra
ConwayHardForkEvent DijkstraEra -> ConwayEpochEvent DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleEvent rule t era =>
t era -> EraRuleEvent rule era
injectEvent

instance InjectRuleEvent "EPOCH" ConwayHardForkEvent DijkstraEra where
  injectEvent :: ConwayHardForkEvent DijkstraEra -> EraRuleEvent "EPOCH" DijkstraEra
injectEvent = ConwayHardForkEvent DijkstraEra -> EraRuleEvent "EPOCH" DijkstraEra
Event (EraRule "HARDFORK" DijkstraEra)
-> ConwayEpochEvent DijkstraEra
forall era. Event (EraRule "HARDFORK" era) -> ConwayEpochEvent era
HardForkEvent