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

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

import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Conway.Rules (
  ConwayCERTS,
  ConwayCertEvent (..),
  ConwayCertPredFailure (..),
  ConwayCertsEvent (..),
  ConwayCertsPredFailure (..),
  ConwayDELEG,
  ConwayDelegPredFailure,
  ConwayGOVCERT,
  ConwayGovCertPredFailure,
 )
import Cardano.Ledger.Dijkstra.Core
import Cardano.Ledger.Dijkstra.Era
import Cardano.Ledger.Dijkstra.Rules.Cert ()
import Cardano.Ledger.Shelley.Rules (PoolEvent, ShelleyPOOL, ShelleyPoolPredFailure)
import Control.State.Transition.Extended
import GHC.Base (absurd)

type instance EraRuleFailure "CERTS" DijkstraEra = ConwayCertsPredFailure DijkstraEra

type instance EraRuleEvent "CERTS" DijkstraEra = ConwayCertsEvent DijkstraEra

instance InjectRuleFailure "CERTS" ConwayCertsPredFailure DijkstraEra

instance InjectRuleFailure "CERTS" ConwayCertPredFailure DijkstraEra where
  injectFailure :: ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERT" DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
ConwayCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
CertFailure

instance InjectRuleFailure "CERTS" ConwayDelegPredFailure DijkstraEra where
  injectFailure :: ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERT" DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
ConwayCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
CertFailure (ConwayCertPredFailure DijkstraEra
 -> ConwayCertsPredFailure DijkstraEra)
-> (ConwayDelegPredFailure DijkstraEra
    -> ConwayCertPredFailure DijkstraEra)
-> ConwayDelegPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayDelegPredFailure DijkstraEra
-> EraRuleFailure "CERT" DijkstraEra
ConwayDelegPredFailure DijkstraEra
-> ConwayCertPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "CERTS" ShelleyPoolPredFailure DijkstraEra where
  injectFailure :: ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERT" DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
ConwayCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
CertFailure (ConwayCertPredFailure DijkstraEra
 -> ConwayCertsPredFailure DijkstraEra)
-> (ShelleyPoolPredFailure DijkstraEra
    -> ConwayCertPredFailure DijkstraEra)
-> ShelleyPoolPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "CERT" DijkstraEra
ShelleyPoolPredFailure DijkstraEra
-> ConwayCertPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "CERTS" ConwayGovCertPredFailure DijkstraEra where
  injectFailure :: ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERT" DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
ConwayCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
CertFailure (ConwayCertPredFailure DijkstraEra
 -> ConwayCertsPredFailure DijkstraEra)
-> (ConwayGovCertPredFailure DijkstraEra
    -> ConwayCertPredFailure DijkstraEra)
-> ConwayGovCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERT" DijkstraEra
ConwayGovCertPredFailure DijkstraEra
-> ConwayCertPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance
  ( Era era
  , STS (DijkstraCERT era)
  , BaseM (EraRule "CERT" era) ~ ShelleyBase
  , Event (EraRule "CERT" era) ~ ConwayCertEvent era
  , PredicateFailure (EraRule "CERT" era) ~ ConwayCertPredFailure era
  ) =>
  Embed (DijkstraCERT era) (ConwayCERTS era)
  where
  wrapFailed :: PredicateFailure (DijkstraCERT era)
-> PredicateFailure (ConwayCERTS era)
wrapFailed = PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
PredicateFailure (DijkstraCERT era)
-> PredicateFailure (ConwayCERTS era)
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
CertFailure
  wrapEvent :: Event (DijkstraCERT era) -> Event (ConwayCERTS era)
wrapEvent = Event (EraRule "CERT" era) -> ConwayCertsEvent era
Event (DijkstraCERT era) -> Event (ConwayCERTS era)
forall era. Event (EraRule "CERT" era) -> ConwayCertsEvent era
CertEvent

instance
  ( Era era
  , STS (ConwayDELEG era)
  , PredicateFailure (EraRule "DELEG" era) ~ ConwayDelegPredFailure era
  ) =>
  Embed (ConwayDELEG era) (DijkstraCERT era)
  where
  wrapFailed :: PredicateFailure (ConwayDELEG era)
-> PredicateFailure (DijkstraCERT era)
wrapFailed = PredicateFailure (EraRule "DELEG" era) -> ConwayCertPredFailure era
PredicateFailure (ConwayDELEG era)
-> PredicateFailure (DijkstraCERT era)
forall era.
PredicateFailure (EraRule "DELEG" era) -> ConwayCertPredFailure era
DelegFailure
  wrapEvent :: Event (ConwayDELEG era) -> Event (DijkstraCERT era)
wrapEvent = Void -> ConwayCertEvent era
Event (ConwayDELEG era) -> Event (DijkstraCERT era)
forall a. Void -> a
absurd

instance
  ( Era era
  , STS (ShelleyPOOL era)
  , Event (EraRule "POOL" era) ~ PoolEvent era
  , PredicateFailure (EraRule "POOL" era) ~ ShelleyPoolPredFailure era
  , PredicateFailure (ShelleyPOOL era) ~ ShelleyPoolPredFailure era
  , BaseM (ShelleyPOOL era) ~ ShelleyBase
  ) =>
  Embed (ShelleyPOOL era) (DijkstraCERT era)
  where
  wrapFailed :: PredicateFailure (ShelleyPOOL era)
-> PredicateFailure (DijkstraCERT era)
wrapFailed = PredicateFailure (EraRule "POOL" era) -> ConwayCertPredFailure era
PredicateFailure (ShelleyPOOL era)
-> PredicateFailure (DijkstraCERT era)
forall era.
PredicateFailure (EraRule "POOL" era) -> ConwayCertPredFailure era
PoolFailure
  wrapEvent :: Event (ShelleyPOOL era) -> Event (DijkstraCERT era)
wrapEvent = Event (EraRule "POOL" era) -> ConwayCertEvent era
Event (ShelleyPOOL era) -> Event (DijkstraCERT era)
forall era. Event (EraRule "POOL" era) -> ConwayCertEvent era
PoolEvent

instance
  ( Era era
  , STS (ConwayGOVCERT era)
  , PredicateFailure (EraRule "GOVCERT" era) ~ ConwayGovCertPredFailure era
  ) =>
  Embed (ConwayGOVCERT era) (DijkstraCERT era)
  where
  wrapFailed :: PredicateFailure (ConwayGOVCERT era)
-> PredicateFailure (DijkstraCERT era)
wrapFailed = PredicateFailure (EraRule "GOVCERT" era)
-> ConwayCertPredFailure era
PredicateFailure (ConwayGOVCERT era)
-> PredicateFailure (DijkstraCERT era)
forall era.
PredicateFailure (EraRule "GOVCERT" era)
-> ConwayCertPredFailure era
GovCertFailure
  wrapEvent :: Event (ConwayGOVCERT era) -> Event (DijkstraCERT era)
wrapEvent = Void -> ConwayCertEvent era
Event (ConwayGOVCERT era) -> Event (DijkstraCERT era)
forall a. Void -> a
absurd