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

module Cardano.Ledger.Dijkstra.Rules.SubGov (
  DijkstraSUBGOV,
  DijkstraSubGovPredFailure (..),
  DijkstraSubGovEvent (..),
) where

import Cardano.Ledger.BaseTypes (
  ShelleyBase,
 )
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
 )
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Conway.Governance
import Cardano.Ledger.Conway.Rules (
  ConwayGovEvent (..),
  ConwayGovPredFailure (..),
  GovEnv,
  GovSignal,
  conwayGovTransition,
 )
import Cardano.Ledger.Conway.State (ConwayEraCertState)
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBGOV,
 )
import Cardano.Ledger.Dijkstra.Rules.Gov (DijkstraGovPredFailure, conwayToDijkstraGovPredFailure)
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks (..))

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

type instance EraRuleFailure "SUBGOV" DijkstraEra = DijkstraSubGovPredFailure DijkstraEra

type instance EraRuleEvent "SUBGOV" DijkstraEra = DijkstraSubGovEvent DijkstraEra

instance InjectRuleFailure "SUBGOV" ConwayGovPredFailure DijkstraEra where
  injectFailure :: ConwayGovPredFailure DijkstraEra
-> EraRuleFailure "SUBGOV" DijkstraEra
injectFailure = DijkstraGovPredFailure DijkstraEra
-> DijkstraSubGovPredFailure DijkstraEra
forall era.
DijkstraGovPredFailure era -> DijkstraSubGovPredFailure era
DijkstraSubGovPredFailure (DijkstraGovPredFailure DijkstraEra
 -> DijkstraSubGovPredFailure DijkstraEra)
-> (ConwayGovPredFailure DijkstraEra
    -> DijkstraGovPredFailure DijkstraEra)
-> ConwayGovPredFailure DijkstraEra
-> DijkstraSubGovPredFailure DijkstraEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConwayGovPredFailure DijkstraEra
-> DijkstraGovPredFailure DijkstraEra
forall era. ConwayGovPredFailure era -> DijkstraGovPredFailure era
conwayToDijkstraGovPredFailure

instance InjectRuleFailure "SUBGOV" DijkstraSubGovPredFailure DijkstraEra

newtype DijkstraSubGovEvent era = DijkstraSubGovEvent (ConwayGovEvent era)
  deriving ((forall x.
 DijkstraSubGovEvent era -> Rep (DijkstraSubGovEvent era) x)
-> (forall x.
    Rep (DijkstraSubGovEvent era) x -> DijkstraSubGovEvent era)
-> Generic (DijkstraSubGovEvent era)
forall x.
Rep (DijkstraSubGovEvent era) x -> DijkstraSubGovEvent era
forall x.
DijkstraSubGovEvent era -> Rep (DijkstraSubGovEvent era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x.
Rep (DijkstraSubGovEvent era) x -> DijkstraSubGovEvent era
forall era x.
DijkstraSubGovEvent era -> Rep (DijkstraSubGovEvent era) x
$cfrom :: forall era x.
DijkstraSubGovEvent era -> Rep (DijkstraSubGovEvent era) x
from :: forall x.
DijkstraSubGovEvent era -> Rep (DijkstraSubGovEvent era) x
$cto :: forall era x.
Rep (DijkstraSubGovEvent era) x -> DijkstraSubGovEvent era
to :: forall x.
Rep (DijkstraSubGovEvent era) x -> DijkstraSubGovEvent era
Generic, DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
(DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool)
-> (DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool)
-> Eq (DijkstraSubGovEvent era)
forall era.
EraPParams era =>
DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall era.
EraPParams era =>
DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
== :: DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
$c/= :: forall era.
EraPParams era =>
DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
/= :: DijkstraSubGovEvent era -> DijkstraSubGovEvent era -> Bool
Eq, DijkstraSubGovEvent era -> ()
(DijkstraSubGovEvent era -> ()) -> NFData (DijkstraSubGovEvent era)
forall era. EraPParams era => DijkstraSubGovEvent era -> ()
forall a. (a -> ()) -> NFData a
$crnf :: forall era. EraPParams era => DijkstraSubGovEvent era -> ()
rnf :: DijkstraSubGovEvent era -> ()
NFData)

instance InjectRuleEvent "SUBGOV" DijkstraSubGovEvent DijkstraEra

instance InjectRuleEvent "SUBGOV" ConwayGovEvent DijkstraEra where
  injectEvent :: ConwayGovEvent DijkstraEra -> EraRuleEvent "SUBGOV" DijkstraEra
injectEvent = ConwayGovEvent DijkstraEra -> EraRuleEvent "SUBGOV" DijkstraEra
ConwayGovEvent DijkstraEra -> DijkstraSubGovEvent DijkstraEra
forall era. ConwayGovEvent era -> DijkstraSubGovEvent era
DijkstraSubGovEvent

instance
  ( ConwayEraCertState era
  , ConwayEraTxCert era
  , ConwayEraPParams era
  , ConwayEraGov era
  , EraRule "SUBGOV" era ~ DijkstraSUBGOV era
  , InjectRuleEvent "SUBGOV" DijkstraSubGovEvent era
  , InjectRuleEvent "SUBGOV" ConwayGovEvent era
  , InjectRuleFailure "SUBGOV" DijkstraSubGovPredFailure era
  , InjectRuleFailure "SUBGOV" ConwayGovPredFailure era
  ) =>
  STS (DijkstraSUBGOV era)
  where
  type State (DijkstraSUBGOV era) = Proposals era
  type Signal (DijkstraSUBGOV era) = GovSignal era
  type Environment (DijkstraSUBGOV era) = GovEnv era
  type BaseM (DijkstraSUBGOV era) = ShelleyBase
  type PredicateFailure (DijkstraSUBGOV era) = DijkstraSubGovPredFailure era
  type Event (DijkstraSUBGOV era) = DijkstraSubGovEvent era

  transitionRules :: [TransitionRule (DijkstraSUBGOV era)]
transitionRules = [TransitionRule (EraRule "SUBGOV" era)
TransitionRule (DijkstraSUBGOV era)
forall (rule :: Symbol) era.
(ConwayEraCertState era, ConwayEraTxCert era, ConwayEraPParams era,
 ConwayEraGov era, STS (EraRule rule era),
 Signal (EraRule rule era) ~ GovSignal era,
 BaseM (EraRule rule era) ~ ShelleyBase,
 Environment (EraRule rule era) ~ GovEnv era,
 State (EraRule rule era) ~ Proposals era,
 InjectRuleFailure rule ConwayGovPredFailure era,
 InjectRuleEvent rule ConwayGovEvent era) =>
TransitionRule (EraRule rule era)
conwayGovTransition]