Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Temporary exclusive claims on Text
ual values which may be subject
to contention, i.e. where strong guarantees on uniqueness are desired.
Synopsis
- withClaim :: Id a -> Text -> Timeout -> Client b -> Client (Maybe b)
- deleteClaim :: Id a -> Text -> Timeout -> Client ()
- lookupClaims :: MonadClient m => Text -> m [Id a]
- data Timeout
- data TimeoutUnit
- = NanoSecond
- | MicroSecond
- | MilliSecond
- | Second
- | Minute
- | Hour
- | Day
- | Week
- (#) :: Word64 -> TimeoutUnit -> Timeout
Documentation
:: Id a | The |
-> Text | The value on which to acquire the claim. |
-> Timeout | The minimum timeout (i.e. duration) of the claim. |
-> Client b | The computation to run with a successful claim. |
-> Client (Maybe b) | 'Just b' if the claim was successful and the |
Obtain a (temporary) exclusive claim on a Text
value for some
Id
entifier. The claim expires after the provided timeout, whether
it was successful or not. Contention can thus render the value
unavailable until the timeout expires if no contender succeeds.
The given IO
computation is only run when the claim was successful
and is responsible for turning the temporary claim into permanent
ownership, if desired.
:: Id a | The |
-> Text | The value on which to acquire the claim. |
-> Timeout | The minimum timeout (i.e. duration) of the rest of the claim. (Each
claim can have more than one claimer (even though this is a feature we
never use), so removing a claim is an update operation on the database.
Therefore, we reset the TTL the same way we reset it in |
-> Client () |
lookupClaims :: MonadClient m => Text -> m [Id a] Source #
Lookup the current claims on a value.
Re-exports
Timeout in nanoseconds. The Printable
instance renders timeouts as
series of AmountUnit
tokens, e.g.
toString
(1 #Day
+ 1500 #MilliSecond
) = "1d1s500ms"
The full list of timeout unit abbreviations:
NanoSecond
- nsMicroSecond
- usMilliSecond
- msSecond
- sMinute
- mHour
- hDay
- dWeek
- w
The Textual
instance accepts this syntax and allows decimal
fractions to be used as amounts:
fmap
toString
(fromStringAs
aTimeout
"1m1.5s0.2us") =Just
"1m1s500ms200ns"
Instances
Bounded Timeout | |
Enum Timeout | |
Ix Timeout | |
Defined in Data.Timeout | |
Num Timeout | |
Read Timeout | |
Integral Timeout | |
Defined in Data.Timeout | |
Real Timeout | |
Defined in Data.Timeout toRational :: Timeout -> Rational # | |
Show Timeout | |
Printable Timeout | |
Textual Timeout | |
Defined in Data.Timeout | |
Eq Timeout | |
Ord Timeout | |
data TimeoutUnit Source #
Timeout unit.