{-# LANGUAGE PatternSynonyms #-} -- | The hard fork combinator -- -- Intended for unqualified import module Ouroboros.Consensus.HardFork.Combinator (module X) where import Data.SOP.Functors as X (Product2 (..)) import Data.SOP.InPairs as X (InPairs (..)) import Data.SOP.Match as X (Mismatch (..)) import Data.SOP.Telescope as X (Telescope (..)) import Ouroboros.Consensus.HardFork.Combinator.Abstract as X import Ouroboros.Consensus.HardFork.Combinator.AcrossEras as X (MismatchEraInfo (..), OneEraApplyTxErr (..), OneEraBlock (..), OneEraGenTx (..), OneEraGenTxId (..), OneEraHash (..), OneEraHeader (..), OneEraTipInfo (..), PerEraBlockConfig (..), PerEraCodecConfig (..), PerEraConsensusConfig (..), PerEraLedgerConfig (..), PerEraStorageConfig (..)) import Ouroboros.Consensus.HardFork.Combinator.Basics as X import Ouroboros.Consensus.HardFork.Combinator.Block as X import Ouroboros.Consensus.HardFork.Combinator.Forging as X (HardForkForgeStateInfo (..), hardForkBlockForging) import Ouroboros.Consensus.HardFork.Combinator.Info as X import Ouroboros.Consensus.HardFork.Combinator.InjectTxs as X (InjectTx, InjectValidatedTx, cannotInjectTx, cannotInjectValidatedTx, pattern InjectTx, pattern InjectValidatedTx) import Ouroboros.Consensus.HardFork.Combinator.Ledger as X import Ouroboros.Consensus.HardFork.Combinator.Ledger.CommonProtocolParams as X () import Ouroboros.Consensus.HardFork.Combinator.Ledger.PeerSelection as X () import Ouroboros.Consensus.HardFork.Combinator.Ledger.Query as X import Ouroboros.Consensus.HardFork.Combinator.Mempool as X import Ouroboros.Consensus.HardFork.Combinator.Node as X () import Ouroboros.Consensus.HardFork.Combinator.Node.DiffusionPipelining as X () import Ouroboros.Consensus.HardFork.Combinator.Node.InitStorage as X () import Ouroboros.Consensus.HardFork.Combinator.Node.Metrics as X () import Ouroboros.Consensus.HardFork.Combinator.PartialConfig as X import Ouroboros.Consensus.HardFork.Combinator.Protocol as X import Ouroboros.Consensus.HardFork.Combinator.Protocol.ChainSel as X import Ouroboros.Consensus.HardFork.Combinator.State as X (HardForkState (..), initHardForkState) import Ouroboros.Consensus.HardFork.Combinator.Translation as X -- Omitted from this export: -- -- * "Ouroboros.Consensus.HardFork.Combinator.State" -- This defines 'HardForkState', a wrapper around a 'Telescope'. We use this -- to define 'HardForkLedgerState', 'HardForkLedgerView' as well as -- 'HardForkChainDepState', but the type itself should mostly be internal to -- the hard fork combinator. We do export the constructor for it, as this may -- be required for serialisation code. -- -- * "module Ouroboros.Consensus.HardFork.Combinator.State.Infra" -- This module is only separate from @.State@ to avoid some cyclic module -- dependencies. Most modules internally to the HFC should import from -- @.State@ directly, and outside of the HFC not even @.State@ should be -- needed (see above). -- -- * "Ouroboros.Consensus.HardFork.Combinator.Protocol.LedgerView" -- This is internal to "Ouroboros.Consensus.HardFork.Combinator.Protocol" -- -- * "Ouroboros.Consensus.HardFork.Combinator.Protocol.State" -- This is internal to "Ouroboros.Consensus.HardFork.Combinator.Protocol" -- -- * "Ouroboros.Consensus.HardFork.Combinator.Degenerate" -- This defines 'DegenFork', which is useful as a test case that the hard -- fork combinator when applied to a single block results in a system -- that is equivalent to just using that single block directly. -- -- * "Ouroboros.Consensus.HardFork.Combinator.Embed.Unary" -- Mostly used in combination with 'DegenFork'. -- -- * "Ouroboros.Consensus.HardFork.Combinator.Embed.Nary" -- Used for injection into n-ary sums. Alternative to @Unary@. -- -- * Most of @Ouroboros.Consensus.HardFork.Combinator.SingleEra.*@ -- These types are primarily used internally to define the HFC types. -- In a few cases some of the HFC types /are/ types from the SingleEra -- module hierarchy directly; in such cases, we should export them from -- this module. -- TODO: Currently we only do this for @SingleEra.Info@, but we might also -- need to do it for other types. -- -- * Ouroboros.Consensus.HardFork.Combinator.Util.* -- We omit most utility functions and types, which are for internal use. Some -- exceptions the defintion of InPairs, which will be required to define -- translations, and the definition of a Telescope, which might be needed to -- define serialisation code.