Safe Haskell | None |
---|---|
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
-
data
PastHorizonException
=
PastHorizon
{
- pastHorizonCallStack :: CallStack
- pastHorizonExpression :: Some ClosedExpr
- pastHorizonSummary :: [ EraSummary ]
- qryFromExpr :: ( forall f. Expr f a) -> Qry a
- runQuery :: forall 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 )
- 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 |
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 :: forall 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
Eq ( Interpreter xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.History.Qry (==) :: Interpreter xs -> Interpreter xs -> Bool Source # (/=) :: Interpreter xs -> Interpreter xs -> Bool Source # |
|
Show ( Interpreter xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.History.Qry |
|
SListI xs => 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.