{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}

-- | Specs necessary to generate, environment, state, and signal
-- for the EPOCH rule
module Test.Cardano.Ledger.Constrained.Conway.Epoch where

import Cardano.Ledger.BaseTypes
import Cardano.Ledger.Coin
import Cardano.Ledger.Conway (Conway, ConwayEra)
import Cardano.Ledger.Core
import Cardano.Ledger.Crypto (StandardCrypto)
import Cardano.Ledger.Shelley.API.Types
import Constrained
import Data.Map.Strict
import GHC.Generics (Generic)

newtype EpochExecEnv era = EpochExecEnv
  { forall era.
EpochExecEnv era
-> Map (Credential 'Staking (EraCrypto era)) (CompactForm Coin)
eeeStakeDistr :: Map (Credential 'Staking (EraCrypto era)) (CompactForm Coin)
  }
  deriving (forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall era x. Rep (EpochExecEnv era) x -> EpochExecEnv era
forall era x. EpochExecEnv era -> Rep (EpochExecEnv era) x
$cto :: forall era x. Rep (EpochExecEnv era) x -> EpochExecEnv era
$cfrom :: forall era x. EpochExecEnv era -> Rep (EpochExecEnv era) x
Generic, EpochExecEnv era -> EpochExecEnv era -> Bool
forall era. EpochExecEnv era -> EpochExecEnv era -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EpochExecEnv era -> EpochExecEnv era -> Bool
$c/= :: forall era. EpochExecEnv era -> EpochExecEnv era -> Bool
== :: EpochExecEnv era -> EpochExecEnv era -> Bool
$c== :: forall era. EpochExecEnv era -> EpochExecEnv era -> Bool
Eq, Int -> EpochExecEnv era -> ShowS
forall era. Int -> EpochExecEnv era -> ShowS
forall era. [EpochExecEnv era] -> ShowS
forall era. EpochExecEnv era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EpochExecEnv era] -> ShowS
$cshowList :: forall era. [EpochExecEnv era] -> ShowS
show :: EpochExecEnv era -> String
$cshow :: forall era. EpochExecEnv era -> String
showsPrec :: Int -> EpochExecEnv era -> ShowS
$cshowsPrec :: forall era. Int -> EpochExecEnv era -> ShowS
Show)

epochEnvSpec :: Specification fn (EpochExecEnv Conway)
epochEnvSpec :: forall (fn :: [*] -> * -> *).
Specification fn (EpochExecEnv Conway)
epochEnvSpec = forall (fn :: [*] -> * -> *) a. Specification fn a
TrueSpec

epochStateSpec :: Specification fn (EpochState (ConwayEra StandardCrypto))
epochStateSpec :: forall (fn :: [*] -> * -> *). Specification fn (EpochState Conway)
epochStateSpec = forall (fn :: [*] -> * -> *) a. Specification fn a
TrueSpec

epochSignalSpec :: Specification fn EpochNo
epochSignalSpec :: forall (fn :: [*] -> * -> *). Specification fn EpochNo
epochSignalSpec = forall (fn :: [*] -> * -> *) a. Specification fn a
TrueSpec