Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data Expr (f ∷ Type → Type) ∷ Type → Type where
- EVar ∷ f a → Expr f a
- ELit ∷ Show a ⇒ a → Expr f a
- ELet ∷ Expr f a → (f a → Expr f b) → Expr f b
- EPair ∷ Expr f a → Expr f b → Expr f (a, b)
- EFst ∷ Expr f (a, b) → Expr f a
- ESnd ∷ Expr f (a, b) → Expr f b
- EAbsToRelTime ∷ Expr f RelativeTime → Expr f TimeInEra
- EAbsToRelSlot ∷ Expr f SlotNo → Expr f SlotInEra
- EAbsToRelEpoch ∷ Expr f EpochNo → Expr f EpochInEra
- ERelToAbsTime ∷ Expr f TimeInEra → Expr f RelativeTime
- ERelToAbsSlot ∷ Expr f (SlotInEra, TimeInSlot) → Expr f SlotNo
- ERelToAbsEpoch ∷ Expr f (EpochInEra, SlotInEpoch) → Expr f EpochNo
- ERelTimeToSlot ∷ Expr f TimeInEra → Expr f (SlotInEra, TimeInSlot)
- ERelSlotToTime ∷ Expr f SlotInEra → Expr f TimeInEra
- ERelSlotToEpoch ∷ Expr f SlotInEra → Expr f (EpochInEra, SlotInEpoch)
- ERelEpochToSlot ∷ Expr f EpochInEra → Expr f SlotInEra
- ESlotLength ∷ Expr f SlotNo → Expr f SlotLength
- EEpochSize ∷ Expr f EpochNo → Expr f EpochSize
- EGenesisWindow ∷ Expr f SlotNo → Expr f GenesisWindow
- data PastHorizonException = PastHorizon {
- pastHorizonCallStack ∷ CallStack
- pastHorizonExpression ∷ Some ClosedExpr
- pastHorizonSummary ∷ [EraSummary]
- qryFromExpr ∷ (∀ f. Expr f a) → Qry a
- runQuery ∷ ∀ a xs. HasCallStack ⇒ Qry a → Summary xs → Either PastHorizonException a
- runQueryPure ∷ HasCallStack ⇒ Qry a → Summary xs → a
- runQueryThrow ∷ (HasCallStack, MonadThrow m) ⇒ Qry a → Summary xs → m a
- data Qry ∷ Type → Type
- interpretQuery ∷ HasCallStack ⇒ Interpreter xs → Qry a → Either PastHorizonException a
- mkInterpreter ∷ Summary xs → Interpreter xs
- unsafeExtendSafeZone ∷ Interpreter xs → Interpreter xs
- data Interpreter xs
- epochToSize ∷ EpochNo → Qry EpochSize
- epochToSlot ∷ EpochNo → Qry (SlotNo, EpochSize)
- epochToSlot' ∷ EpochNo → Qry SlotNo
- slotToEpoch ∷ SlotNo → Qry (EpochNo, Word64, Word64)
- slotToEpoch' ∷ SlotNo → Qry (EpochNo, Word64)
- slotToGenesisWindow ∷ SlotNo → Expr f GenesisWindow
- slotToSlotLength ∷ SlotNo → Qry SlotLength
- slotToWallclock ∷ SlotNo → Qry (RelativeTime, SlotLength)
- wallclockToSlot ∷ RelativeTime → Qry (SlotNo, NominalDiffTime, NominalDiffTime)
Qry
data Expr (f ∷ Type → Type) ∷ Type → Type where Source #
Query expressions in PHOAS
EVar ∷ f a → Expr f a | |
ELit ∷ Show a ⇒ a → Expr f a | |
ELet ∷ Expr f a → (f a → Expr f b) → Expr f b | |
EPair ∷ Expr f a → Expr f b → Expr f (a, b) | |
EFst ∷ Expr f (a, b) → Expr f a | |
ESnd ∷ Expr f (a, b) → Expr f b | |
EAbsToRelTime ∷ Expr f RelativeTime → Expr f TimeInEra | |
EAbsToRelSlot ∷ Expr f SlotNo → Expr f SlotInEra | |
EAbsToRelEpoch ∷ Expr f EpochNo → Expr f EpochInEra | |
ERelToAbsTime ∷ Expr f TimeInEra → Expr f RelativeTime | |
ERelToAbsSlot ∷ Expr f (SlotInEra, TimeInSlot) → Expr f SlotNo | |
ERelToAbsEpoch ∷ Expr f (EpochInEra, SlotInEpoch) → Expr f EpochNo | |
ERelTimeToSlot ∷ Expr f TimeInEra → Expr f (SlotInEra, TimeInSlot) | |
ERelSlotToTime ∷ Expr f SlotInEra → Expr f TimeInEra | |
ERelSlotToEpoch ∷ Expr f SlotInEra → Expr f (EpochInEra, SlotInEpoch) | |
ERelEpochToSlot ∷ Expr f EpochInEra → Expr f SlotInEra | |
ESlotLength ∷ Expr f SlotNo → Expr f SlotLength | |
EEpochSize ∷ Expr f EpochNo → Expr f EpochSize | |
EGenesisWindow ∷ Expr f SlotNo → Expr f GenesisWindow |
data PastHorizonException Source #
We tried to convert something that is past the horizon
That is, we tried to convert something that is past the point in time beyond which we lack information due to uncertainty about the next hard fork.
PastHorizon | |
|
Instances
runQuery ∷ ∀ a xs. HasCallStack ⇒ Qry a → Summary xs → Either PastHorizonException a Source #
Run a query
Unlike an Expr
, which is evaluated in a single era, a Qry
is evaluated
against all eras. Only if all Expr
s embedded in the Qry
can be
evaluated in the same era (we don't want to mix properties of different
eras in one query) do we return the result. If there is no era in which we
can evaluate all Expr
s in the Qry
, we report a PastHorizonException
.
NOTE: this means that queries about separate eras have to be run separately, they should not be composed into a single query. How could we know to which era which relative slot/time refers?
runQueryPure ∷ HasCallStack ⇒ Qry a → Summary xs → a Source #
runQueryThrow ∷ (HasCallStack, MonadThrow m) ⇒ Qry a → Summary xs → m a Source #
opaque
data Qry ∷ Type → Type Source #
Query
Qry
adds a monadic interface on top of Expr
. Although means that Qry
itself is not showable, the PastHorizonException
can nonetheless show the
offending expression alongside the Summary
against which it was evaluated.
Interpreter
interpretQuery ∷ HasCallStack ⇒ Interpreter xs → Qry a → Either PastHorizonException a Source #
mkInterpreter ∷ Summary xs → Interpreter xs Source #
unsafeExtendSafeZone ∷ Interpreter xs → Interpreter xs Source #
UNSAFE: extend the safe zone of the current era of the given Interpreter
to be unbounded, ignoring any future hard forks.
This only has effect when the Interpreter
was obtained in an era that was
not the final one (in the final era, this is a no-op). The Interpreter
will be made to believe that the current era is the final era, making its
horizon unbounded, and thus never returning a PastHorizonException
.
Use of this function is strongly discouraged, as it will ignore any future
hard forks, and the results produced by the Interpreter
can thus be
incorrect.
opaque
data Interpreter xs Source #
Can be sent across the LocalStateQuery protocol to interpret queries in the wallet.
The Summary
should be considered internal.
Instances
Show (Interpreter xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.History.Qry showsPrec ∷ Int → Interpreter xs → ShowS # show ∷ Interpreter xs → String # showList ∷ [Interpreter xs] → ShowS # | |
Eq (Interpreter xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.History.Qry (==) ∷ Interpreter xs → Interpreter xs → Bool # (/=) ∷ Interpreter xs → Interpreter xs → Bool # | |
(SListI xs, Given EraParamsFormat) ⇒ Serialise (Interpreter xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.History.Qry encode ∷ Interpreter xs → Encoding Source # decode ∷ Decoder s (Interpreter xs) Source # encodeList ∷ [Interpreter xs] → Encoding Source # decodeList ∷ Decoder s [Interpreter xs] Source # |
Specific queries
slotToSlotLength ∷ SlotNo → Qry SlotLength Source #
Acquire a slot's length
slotToWallclock ∷ SlotNo → Qry (RelativeTime, SlotLength) Source #
Translate SlotNo
to the UTCTime
at the start of that slot
Additionally returns the length of the slot.
wallclockToSlot ∷ RelativeTime → Qry (SlotNo, NominalDiffTime, NominalDiffTime) Source #
Translate UTCTime
to SlotNo
Additionally returns the time spent and time left in this slot.