{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module Ouroboros.Consensus.HardFork.Combinator.PartialConfig (
HasPartialConsensusConfig(..)
, HasPartialLedgerConfig(..)
, WrapPartialLedgerConfig(..)
, WrapPartialConsensusConfig(..)
, EpochInfo(..)
, Identity(..)
) where
import Data.Functor.Identity
import Data.Kind (Type)
import NoThunks.Class (NoThunks)
import Cardano.Slotting.EpochInfo
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.Ledger.Abstract
import Ouroboros.Consensus.Protocol.Abstract
class ( ConsensusProtocol p
, NoThunks (PartialConsensusConfig p)
) => HasPartialConsensusConfig p where
type PartialConsensusConfig p :: Type
type PartialConsensusConfig p = ConsensusConfig p
completeConsensusConfig :: proxy p
-> EpochInfo Identity
-> PartialConsensusConfig p -> ConsensusConfig p
default completeConsensusConfig :: (PartialConsensusConfig p ~ ConsensusConfig p)
=> proxy p
-> EpochInfo Identity
-> PartialConsensusConfig p -> ConsensusConfig p
completeConsensusConfig proxy p
_ EpochInfo Identity
_ = PartialConsensusConfig p -> ConsensusConfig p
forall a. a -> a
id
partialChainSelConfig :: proxy p -> PartialConsensusConfig p -> ChainSelConfig p
default partialChainSelConfig :: (PartialConsensusConfig p ~ ConsensusConfig p)
=> proxy p
-> PartialConsensusConfig p -> ChainSelConfig p
partialChainSelConfig proxy p
_ = PartialConsensusConfig p -> ChainSelConfig p
forall p.
ConsensusProtocol p =>
ConsensusConfig p -> ChainSelConfig p
chainSelConfig
class ( UpdateLedger blk
, NoThunks (PartialLedgerConfig blk)
) => HasPartialLedgerConfig blk where
type PartialLedgerConfig blk :: Type
type PartialLedgerConfig blk = LedgerConfig blk
completeLedgerConfig :: proxy blk
-> EpochInfo Identity
-> PartialLedgerConfig blk -> LedgerConfig blk
default completeLedgerConfig :: (PartialLedgerConfig blk ~ LedgerConfig blk)
=> proxy blk
-> EpochInfo Identity
-> PartialLedgerConfig blk -> LedgerConfig blk
completeLedgerConfig proxy blk
_ EpochInfo Identity
_ = PartialLedgerConfig blk -> LedgerConfig blk
forall a. a -> a
id
newtype WrapPartialLedgerConfig blk = WrapPartialLedgerConfig { WrapPartialLedgerConfig blk -> PartialLedgerConfig blk
unwrapPartialLedgerConfig :: PartialLedgerConfig blk }
newtype WrapPartialConsensusConfig blk = WrapPartialConsensusConfig { WrapPartialConsensusConfig blk
-> PartialConsensusConfig (BlockProtocol blk)
unwrapPartialConsensusConfig :: PartialConsensusConfig (BlockProtocol blk) }
deriving instance NoThunks (PartialLedgerConfig blk) => NoThunks (WrapPartialLedgerConfig blk)
deriving instance NoThunks (PartialConsensusConfig (BlockProtocol blk)) => NoThunks (WrapPartialConsensusConfig blk)