{-# 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.