{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Mary.Transition (TransitionConfig (..)) where

import Cardano.Ledger.Allegra
import Cardano.Ledger.Allegra.Transition
import Cardano.Ledger.Genesis (NoGenesis (..))
import Cardano.Ledger.Mary.Era
import Cardano.Ledger.Mary.State ()
import Cardano.Ledger.Mary.Translation ()
import Cardano.Ledger.Shelley.Transition
import Lens.Micro
import NoThunks.Class (NoThunks (..))

instance EraTransition MaryEra where
  newtype TransitionConfig MaryEra = MaryTransitionConfig
    { TransitionConfig MaryEra -> TransitionConfig AllegraEra
mtcAllegraTransitionConfig :: TransitionConfig AllegraEra
    }
    deriving (Int -> TransitionConfig MaryEra -> ShowS
[TransitionConfig MaryEra] -> ShowS
TransitionConfig MaryEra -> String
(Int -> TransitionConfig MaryEra -> ShowS)
-> (TransitionConfig MaryEra -> String)
-> ([TransitionConfig MaryEra] -> ShowS)
-> Show (TransitionConfig MaryEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransitionConfig MaryEra -> ShowS
showsPrec :: Int -> TransitionConfig MaryEra -> ShowS
$cshow :: TransitionConfig MaryEra -> String
show :: TransitionConfig MaryEra -> String
$cshowList :: [TransitionConfig MaryEra] -> ShowS
showList :: [TransitionConfig MaryEra] -> ShowS
Show, TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
(TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool)
-> (TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool)
-> Eq (TransitionConfig MaryEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
== :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
$c/= :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
/= :: TransitionConfig MaryEra -> TransitionConfig MaryEra -> Bool
Eq, Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
Proxy (TransitionConfig MaryEra) -> String
(Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo))
-> (Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo))
-> (Proxy (TransitionConfig MaryEra) -> String)
-> NoThunks (TransitionConfig MaryEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> TransitionConfig MaryEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (TransitionConfig MaryEra) -> String
showTypeOf :: Proxy (TransitionConfig MaryEra) -> String
NoThunks)

  mkTransitionConfig :: TranslationContext MaryEra
-> TransitionConfig (PreviousEra MaryEra)
-> TransitionConfig MaryEra
mkTransitionConfig TranslationContext MaryEra
NoGenesis MaryEra
NoGenesis = TransitionConfig AllegraEra -> TransitionConfig MaryEra
TransitionConfig (PreviousEra MaryEra) -> TransitionConfig MaryEra
MaryTransitionConfig

  injectIntoTestState :: TransitionConfig MaryEra
-> NewEpochState MaryEra -> NewEpochState MaryEra
injectIntoTestState = TransitionConfig MaryEra
-> NewEpochState MaryEra -> NewEpochState MaryEra
forall era.
EraTransition era =>
TransitionConfig era -> NewEpochState era -> NewEpochState era
registerInitialFundsThenStaking

  tcPreviousEraConfigL :: EraTransition (PreviousEra MaryEra) =>
Lens'
  (TransitionConfig MaryEra) (TransitionConfig (PreviousEra MaryEra))
tcPreviousEraConfigL =
    (TransitionConfig MaryEra -> TransitionConfig AllegraEra)
-> (TransitionConfig MaryEra
    -> TransitionConfig AllegraEra -> TransitionConfig MaryEra)
-> Lens
     (TransitionConfig MaryEra)
     (TransitionConfig MaryEra)
     (TransitionConfig AllegraEra)
     (TransitionConfig AllegraEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TransitionConfig MaryEra -> TransitionConfig AllegraEra
mtcAllegraTransitionConfig (\TransitionConfig MaryEra
mtc TransitionConfig AllegraEra
pc -> TransitionConfig MaryEra
mtc {mtcAllegraTransitionConfig = pc})

  tcTranslationContextL :: Lens' (TransitionConfig MaryEra) (TranslationContext MaryEra)
tcTranslationContextL = (TransitionConfig MaryEra -> NoGenesis MaryEra)
-> (TransitionConfig MaryEra
    -> NoGenesis MaryEra -> TransitionConfig MaryEra)
-> Lens
     (TransitionConfig MaryEra)
     (TransitionConfig MaryEra)
     (NoGenesis MaryEra)
     (NoGenesis MaryEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (NoGenesis MaryEra -> TransitionConfig MaryEra -> NoGenesis MaryEra
forall a b. a -> b -> a
const NoGenesis MaryEra
forall era. NoGenesis era
NoGenesis) TransitionConfig MaryEra
-> NoGenesis MaryEra -> TransitionConfig MaryEra
forall a b. a -> b -> a
const