{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE EmptyDataDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralisedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Rules.SubDeleg (
  DijkstraSUBDELEG,
  DijkstraSubDelegPredFailure (..),
) where

import Cardano.Ledger.BaseTypes (
  ShelleyBase,
 )
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
 )
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Rules (ConwayDelegEnv, ConwayDelegPredFailure)
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBDELEG,
 )
import Cardano.Ledger.Dijkstra.State
import Cardano.Ledger.Dijkstra.TxCert (DijkstraDelegCert)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended (
  BaseM,
  Environment,
  Event,
  PredicateFailure,
  STS,
  Signal,
  State,
  TRC (TRC),
  TransitionRule,
  judgmentContext,
  transitionRules,
 )
import Data.Void (Void)
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks (..))

newtype DijkstraSubDelegPredFailure era = DijkstraSubDelegPredFailure (ConwayDelegPredFailure era)
  deriving ((forall x.
 DijkstraSubDelegPredFailure era
 -> Rep (DijkstraSubDelegPredFailure era) x)
-> (forall x.
    Rep (DijkstraSubDelegPredFailure era) x
    -> DijkstraSubDelegPredFailure era)
-> Generic (DijkstraSubDelegPredFailure era)
forall x.
Rep (DijkstraSubDelegPredFailure era) x
-> DijkstraSubDelegPredFailure era
forall x.
DijkstraSubDelegPredFailure era
-> Rep (DijkstraSubDelegPredFailure era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubDelegPredFailure era) x
-> DijkstraSubDelegPredFailure era
forall era x.
DijkstraSubDelegPredFailure era
-> Rep (DijkstraSubDelegPredFailure era) x
$cfrom :: forall era x.
DijkstraSubDelegPredFailure era
-> Rep (DijkstraSubDelegPredFailure era) x
from :: forall x.
DijkstraSubDelegPredFailure era
-> Rep (DijkstraSubDelegPredFailure era) x
$cto :: forall era x.
Rep (DijkstraSubDelegPredFailure era) x
-> DijkstraSubDelegPredFailure era
to :: forall x.
Rep (DijkstraSubDelegPredFailure era) x
-> DijkstraSubDelegPredFailure era
Generic, DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
(DijkstraSubDelegPredFailure era
 -> DijkstraSubDelegPredFailure era -> Bool)
-> (DijkstraSubDelegPredFailure era
    -> DijkstraSubDelegPredFailure era -> Bool)
-> Eq (DijkstraSubDelegPredFailure era)
forall era.
DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
== :: DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
$c/= :: forall era.
DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
/= :: DijkstraSubDelegPredFailure era
-> DijkstraSubDelegPredFailure era -> Bool
Eq, Int -> DijkstraSubDelegPredFailure era -> ShowS
[DijkstraSubDelegPredFailure era] -> ShowS
DijkstraSubDelegPredFailure era -> String
(Int -> DijkstraSubDelegPredFailure era -> ShowS)
-> (DijkstraSubDelegPredFailure era -> String)
-> ([DijkstraSubDelegPredFailure era] -> ShowS)
-> Show (DijkstraSubDelegPredFailure era)
forall era. Int -> DijkstraSubDelegPredFailure era -> ShowS
forall era. [DijkstraSubDelegPredFailure era] -> ShowS
forall era. DijkstraSubDelegPredFailure era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> DijkstraSubDelegPredFailure era -> ShowS
showsPrec :: Int -> DijkstraSubDelegPredFailure era -> ShowS
$cshow :: forall era. DijkstraSubDelegPredFailure era -> String
show :: DijkstraSubDelegPredFailure era -> String
$cshowList :: forall era. [DijkstraSubDelegPredFailure era] -> ShowS
showList :: [DijkstraSubDelegPredFailure era] -> ShowS
Show, DijkstraSubDelegPredFailure era -> ()
(DijkstraSubDelegPredFailure era -> ())
-> NFData (DijkstraSubDelegPredFailure era)
forall era. DijkstraSubDelegPredFailure era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. DijkstraSubDelegPredFailure era -> ()
rnf :: DijkstraSubDelegPredFailure era -> ()
NFData, Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
Proxy (DijkstraSubDelegPredFailure era) -> String
(Context
 -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo))
-> (Context
    -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo))
-> (Proxy (DijkstraSubDelegPredFailure era) -> String)
-> NoThunks (DijkstraSubDelegPredFailure era)
forall era.
Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
forall era. Proxy (DijkstraSubDelegPredFailure era) -> String
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: forall era.
Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
noThunks :: Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall era.
Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> DijkstraSubDelegPredFailure era -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall era. Proxy (DijkstraSubDelegPredFailure era) -> String
showTypeOf :: Proxy (DijkstraSubDelegPredFailure era) -> String
NoThunks, DijkstraSubDelegPredFailure era -> Encoding
(DijkstraSubDelegPredFailure era -> Encoding)
-> EncCBOR (DijkstraSubDelegPredFailure era)
forall era. Era era => DijkstraSubDelegPredFailure era -> Encoding
forall a. (a -> Encoding) -> EncCBOR a
$cencCBOR :: forall era. Era era => DijkstraSubDelegPredFailure era -> Encoding
encCBOR :: DijkstraSubDelegPredFailure era -> Encoding
EncCBOR, Typeable (DijkstraSubDelegPredFailure era)
Typeable (DijkstraSubDelegPredFailure era) =>
(forall s. Decoder s (DijkstraSubDelegPredFailure era))
-> (forall s.
    Proxy (DijkstraSubDelegPredFailure era) -> Decoder s ())
-> (Proxy (DijkstraSubDelegPredFailure era) -> Text)
-> DecCBOR (DijkstraSubDelegPredFailure era)
Proxy (DijkstraSubDelegPredFailure era) -> Text
forall s. Decoder s (DijkstraSubDelegPredFailure era)
forall a.
Typeable a =>
(forall s. Decoder s a)
-> (forall s. Proxy a -> Decoder s ())
-> (Proxy a -> Text)
-> DecCBOR a
forall s. Proxy (DijkstraSubDelegPredFailure era) -> Decoder s ()
forall era. Era era => Typeable (DijkstraSubDelegPredFailure era)
forall era.
Era era =>
Proxy (DijkstraSubDelegPredFailure era) -> Text
forall era s.
Era era =>
Decoder s (DijkstraSubDelegPredFailure era)
forall era s.
Era era =>
Proxy (DijkstraSubDelegPredFailure era) -> Decoder s ()
$cdecCBOR :: forall era s.
Era era =>
Decoder s (DijkstraSubDelegPredFailure era)
decCBOR :: forall s. Decoder s (DijkstraSubDelegPredFailure era)
$cdropCBOR :: forall era s.
Era era =>
Proxy (DijkstraSubDelegPredFailure era) -> Decoder s ()
dropCBOR :: forall s. Proxy (DijkstraSubDelegPredFailure era) -> Decoder s ()
$clabel :: forall era.
Era era =>
Proxy (DijkstraSubDelegPredFailure era) -> Text
label :: Proxy (DijkstraSubDelegPredFailure era) -> Text
DecCBOR)

type instance EraRuleFailure "SUBDELEG" DijkstraEra = DijkstraSubDelegPredFailure DijkstraEra

type instance EraRuleEvent "SUBDELEG" DijkstraEra = VoidEraRule "SUBDELEG" DijkstraEra

instance InjectRuleFailure "SUBDELEG" DijkstraSubDelegPredFailure DijkstraEra

instance
  ( EraGov era
  , EraCertState era
  , EraRule "SUBDELEG" era ~ DijkstraSUBDELEG era
  ) =>
  STS (DijkstraSUBDELEG era)
  where
  type State (DijkstraSUBDELEG era) = CertState era
  type Signal (DijkstraSUBDELEG era) = DijkstraDelegCert
  type Environment (DijkstraSUBDELEG era) = ConwayDelegEnv era
  type BaseM (DijkstraSUBDELEG era) = ShelleyBase
  type PredicateFailure (DijkstraSUBDELEG era) = DijkstraSubDelegPredFailure era
  type Event (DijkstraSUBDELEG era) = Void

  transitionRules :: [TransitionRule (DijkstraSUBDELEG era)]
transitionRules = [forall era. TransitionRule (EraRule "SUBDELEG" era)
dijkstraSubDelegTransition @era]

dijkstraSubDelegTransition :: TransitionRule (EraRule "SUBDELEG" era)
dijkstraSubDelegTransition :: forall era. TransitionRule (EraRule "SUBDELEG" era)
dijkstraSubDelegTransition = do
  TRC (_, st, _) <- Rule
  (EraRule "SUBDELEG" era)
  'Transition
  (RuleContext 'Transition (EraRule "SUBDELEG" era))
F (Clause (EraRule "SUBDELEG" era) 'Transition)
  (TRC (EraRule "SUBDELEG" era))
forall sts (rtype :: RuleType).
Rule sts rtype (RuleContext rtype sts)
judgmentContext
  pure st