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

module Cardano.Ledger.Dijkstra.Rules.SubPool (
  DijkstraSUBPOOL,
  DijkstraSubPoolPredFailure (..),
  DijkstraSubPoolEvent (..),
) where

import Cardano.Ledger.BaseTypes (
  ShelleyBase,
 )
import Cardano.Ledger.Binary (
  DecCBOR (..),
  EncCBOR (..),
 )
import Cardano.Ledger.Conway.Core
import Cardano.Ledger.Dijkstra.Era (
  DijkstraEra,
  DijkstraSUBPOOL,
 )
import Cardano.Ledger.Dijkstra.State
import Cardano.Ledger.Shelley.Rules (
  PoolEnv,
  PoolEvent (..),
  ShelleyPoolPredFailure,
  poolTransition,
 )
import Control.DeepSeq (NFData)
import Control.State.Transition.Extended (
  BaseM,
  Environment,
  Event,
  PredicateFailure,
  STS,
  Signal,
  State,
  transitionRules,
 )
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks (..))

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

type instance EraRuleFailure "SUBPOOL" DijkstraEra = DijkstraSubPoolPredFailure DijkstraEra

type instance EraRuleEvent "SUBPOOL" DijkstraEra = DijkstraSubPoolEvent DijkstraEra

instance InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure DijkstraEra

instance InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure DijkstraEra where
  injectFailure :: ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "SUBPOOL" DijkstraEra
injectFailure = ShelleyPoolPredFailure DijkstraEra
-> EraRuleFailure "SUBPOOL" DijkstraEra
ShelleyPoolPredFailure DijkstraEra
-> DijkstraSubPoolPredFailure DijkstraEra
forall era.
ShelleyPoolPredFailure era -> DijkstraSubPoolPredFailure era
DijkstraSubPoolPredFailure

instance InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent DijkstraEra

instance InjectRuleEvent "SUBPOOL" PoolEvent DijkstraEra where
  injectEvent :: PoolEvent DijkstraEra -> EraRuleEvent "SUBPOOL" DijkstraEra
injectEvent = PoolEvent DijkstraEra -> EraRuleEvent "SUBPOOL" DijkstraEra
PoolEvent DijkstraEra -> DijkstraSubPoolEvent DijkstraEra
forall era. PoolEvent era -> DijkstraSubPoolEvent era
DijkstraSubPoolEvent

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

instance
  ( EraGov era
  , EraRule "SUBPOOL" era ~ DijkstraSUBPOOL era
  , InjectRuleEvent "SUBPOOL" DijkstraSubPoolEvent era
  , InjectRuleEvent "SUBPOOL" PoolEvent era
  , InjectRuleFailure "SUBPOOL" DijkstraSubPoolPredFailure era
  , InjectRuleFailure "SUBPOOL" ShelleyPoolPredFailure era
  ) =>
  STS (DijkstraSUBPOOL era)
  where
  type State (DijkstraSUBPOOL era) = PState era
  type Signal (DijkstraSUBPOOL era) = PoolCert
  type Environment (DijkstraSUBPOOL era) = PoolEnv era
  type BaseM (DijkstraSUBPOOL era) = ShelleyBase
  type PredicateFailure (DijkstraSUBPOOL era) = DijkstraSubPoolPredFailure era
  type Event (DijkstraSUBPOOL era) = DijkstraSubPoolEvent era

  transitionRules :: [TransitionRule (DijkstraSUBPOOL era)]
transitionRules = [TransitionRule (EraRule "SUBPOOL" era)
TransitionRule (DijkstraSUBPOOL era)
forall (rule :: Symbol) era.
(EraPParams era, Signal (EraRule rule era) ~ PoolCert,
 Environment (EraRule rule era) ~ PoolEnv era,
 State (EraRule rule era) ~ PState era, STS (EraRule rule era),
 BaseM (EraRule rule era) ~ ShelleyBase,
 InjectRuleFailure rule ShelleyPoolPredFailure era,
 InjectRuleEvent rule PoolEvent era) =>
TransitionRule (EraRule rule era)
poolTransition]