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

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

import qualified Cardano.Ledger.Conway.Rules as Conway
import Cardano.Ledger.Dijkstra.Core
import Cardano.Ledger.Dijkstra.Era
import Cardano.Ledger.Dijkstra.Rules.Cert ()
import Cardano.Ledger.Dijkstra.Rules.GovCert (DijkstraGovCertPredFailure)
import qualified Cardano.Ledger.Shelley.Rules as Shelley
import Control.State.Transition.Extended
import GHC.Base (absurd)

type instance EraRuleFailure "CERTS" DijkstraEra = Conway.ConwayCertsPredFailure DijkstraEra

type instance EraRuleEvent "CERTS" DijkstraEra = Conway.ConwayCertsEvent DijkstraEra

instance InjectRuleFailure "CERTS" Conway.ConwayCertsPredFailure DijkstraEra

instance InjectRuleFailure "CERTS" Conway.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
Conway.CertFailure

instance InjectRuleFailure "CERTS" Conway.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
Conway.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" Shelley.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
Conway.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" DijkstraGovCertPredFailure DijkstraEra where
  injectFailure :: DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERTS" DijkstraEra
injectFailure = PredicateFailure (EraRule "CERT" DijkstraEra)
-> ConwayCertsPredFailure DijkstraEra
ConwayCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
Conway.CertFailure (ConwayCertPredFailure DijkstraEra
 -> ConwayCertsPredFailure DijkstraEra)
-> (DijkstraGovCertPredFailure DijkstraEra
    -> ConwayCertPredFailure DijkstraEra)
-> DijkstraGovCertPredFailure DijkstraEra
-> ConwayCertsPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DijkstraGovCertPredFailure DijkstraEra
-> EraRuleFailure "CERT" DijkstraEra
DijkstraGovCertPredFailure DijkstraEra
-> ConwayCertPredFailure DijkstraEra
forall (rule :: Symbol) (t :: * -> *) era.
InjectRuleFailure rule t era =>
t era -> EraRuleFailure rule era
injectFailure

instance InjectRuleFailure "CERTS" Conway.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
Conway.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 (CERT era)
  , Event (EraRule "CERT" era) ~ Conway.ConwayCertEvent era
  , PredicateFailure (EraRule "CERT" era) ~ Conway.ConwayCertPredFailure era
  ) =>
  Embed (CERT era) (Conway.CERTS era)
  where
  wrapFailed :: PredicateFailure (CERT era) -> PredicateFailure (CERTS era)
wrapFailed = PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
PredicateFailure (CERT era) -> PredicateFailure (CERTS era)
forall era.
PredicateFailure (EraRule "CERT" era) -> ConwayCertsPredFailure era
Conway.CertFailure
  wrapEvent :: Event (CERT era) -> Event (CERTS era)
wrapEvent = Event (EraRule "CERT" era) -> ConwayCertsEvent era
Event (CERT era) -> Event (CERTS era)
forall era. Event (EraRule "CERT" era) -> ConwayCertsEvent era
Conway.CertEvent

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

instance
  ( STS (Shelley.POOL era)
  , PredicateFailure (EraRule "POOL" era) ~ Shelley.ShelleyPoolPredFailure era
  , Event (EraRule "POOL" era) ~ Shelley.PoolEvent era
  ) =>
  Embed (Shelley.POOL era) (CERT era)
  where
  wrapFailed :: PredicateFailure (POOL era) -> PredicateFailure (CERT era)
wrapFailed = PredicateFailure (EraRule "POOL" era) -> ConwayCertPredFailure era
PredicateFailure (POOL era) -> PredicateFailure (CERT era)
forall era.
PredicateFailure (EraRule "POOL" era) -> ConwayCertPredFailure era
Conway.PoolFailure
  wrapEvent :: Event (POOL era) -> Event (CERT era)
wrapEvent = Event (EraRule "POOL" era) -> ConwayCertEvent era
Event (POOL era) -> Event (CERT era)
forall era. Event (EraRule "POOL" era) -> ConwayCertEvent era
Conway.PoolEvent

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