| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Util.STM
Synopsis
- data Watcher (m ∷ Type → Type) a fp = Watcher {}
- forkLinkedWatcher ∷ ∀ m a fp. (IOLike m, Eq fp, HasCallStack) ⇒ ResourceRegistry m → String → Watcher m a fp → m (Thread m Void)
- forkLinkedWatcherAllocate ∷ ∀ m r a fp. (IOLike m, Eq fp, HasCallStack) ⇒ ResourceRegistry m → String → m r → (r → m ()) → (r → Watcher m a fp) → m (Thread m Void)
- forkLinkedWatcherFinalize ∷ ∀ m a fp. (IOLike m, Eq fp, HasCallStack) ⇒ ResourceRegistry m → String → Watcher m a fp → m () → m (Thread m Void)
- withWatcher ∷ ∀ m a fp r. (IOLike m, Eq fp, HasCallStack) ⇒ String → Watcher m a fp → m r → m r
- newtype Fingerprint = Fingerprint Word64
- data WithFingerprint a = WithFingerprint {}
- blockUntilAllJust ∷ ∀ (m ∷ Type → Type) a. MonadSTM m ⇒ [STM m (Maybe a)] → STM m [a]
- blockUntilChanged ∷ ∀ (m ∷ Type → Type) a b. (MonadSTM m, Eq b) ⇒ (a → b) → b → STM m a → STM m (a, b)
- blockUntilJust ∷ ∀ (m ∷ Type → Type) a. MonadSTM m ⇒ STM m (Maybe a) → STM m a
- runWhenJust ∷ IOLike m ⇒ ResourceRegistry m → String → STM m (Maybe a) → (a → m ()) → m ()
- newtype Sim (n ∷ Type → Type) (m ∷ Type → Type) = Sim {}
- simId ∷ ∀ (m ∷ Type → Type). Sim (STM m) m
- simStateT ∷ ∀ (m ∷ Type → Type) st (n ∷ Type → Type). IOLike m ⇒ StrictTVar m st → Sim n m → Sim (StateT st n) m
- withTMVar ∷ IOLike m ⇒ StrictTMVar m a → (a → m (c, a)) → m c
- withTMVarAnd ∷ IOLike m ⇒ StrictTMVar m a → (a → STM m b) → (a → b → m (c, a)) → m c
Watcher
data Watcher (m ∷ Type → Type) a fp Source #
Specification for a thread that watches a variable, and reports interesting changes.
NOTE: STM does not guarantee that wNotify will literally be called on
every change: when the system is under heavy load, some updates may be
missed.
Constructors
| Watcher | |
Fields
| |
Arguments
| ∷ ∀ m a fp. (IOLike m, Eq fp, HasCallStack) | |
| ⇒ ResourceRegistry m | |
| → String | Label for the thread |
| → Watcher m a fp | |
| → m (Thread m Void) |
Spawn a new thread that runs a Watcher
The thread will be linked to the registry.
forkLinkedWatcherAllocate Source #
Arguments
| ∷ ∀ m r a fp. (IOLike m, Eq fp, HasCallStack) | |
| ⇒ ResourceRegistry m | |
| → String | Label for the thread |
| → m r | |
| → (r → m ()) | |
| → (r → Watcher m a fp) | |
| → m (Thread m Void) |
Spawn a new thread that safely allocates a resource, then runs a Watcher
using the resource, finalizing the resource safely when the watcher
terminates in any way.
The allocated resource and thread are both linked to the registry.
forkLinkedWatcherFinalize Source #
Arguments
| ∷ ∀ m a fp. (IOLike m, Eq fp, HasCallStack) | |
| ⇒ ResourceRegistry m | |
| → String | Label for the thread |
| → Watcher m a fp | |
| → m () | |
| → m (Thread m Void) |
Spawn a new thread that runs a Watcher, executing a finalizer when the
thread terminates.
The thread will be linked to the registry.
Arguments
| ∷ ∀ m a fp r. (IOLike m, Eq fp, HasCallStack) | |
| ⇒ String | Label for the thread |
| → Watcher m a fp | |
| → m r | |
| → m r |
Misc
newtype Fingerprint Source #
Simple type that can be used to indicate some value (without/only with an
expensive Eq instance) changed.
Constructors
| Fingerprint Word64 |
Instances
data WithFingerprint a Source #
Store a value together with its Fingerprint.
Constructors
| WithFingerprint | |
Fields | |
Instances
| Functor WithFingerprint | |||||
Defined in Ouroboros.Network.BlockFetch.ConsensusInterface Methods fmap ∷ (a → b) → WithFingerprint a → WithFingerprint b # (<$) ∷ a → WithFingerprint b → WithFingerprint a # | |||||
| Generic (WithFingerprint a) | |||||
Defined in Ouroboros.Network.BlockFetch.ConsensusInterface Associated Types
Methods from ∷ WithFingerprint a → Rep (WithFingerprint a) x # to ∷ Rep (WithFingerprint a) x → WithFingerprint a # | |||||
| Show a ⇒ Show (WithFingerprint a) | |||||
Defined in Ouroboros.Network.BlockFetch.ConsensusInterface Methods showsPrec ∷ Int → WithFingerprint a → ShowS # show ∷ WithFingerprint a → String # showList ∷ [WithFingerprint a] → ShowS # | |||||
| NoThunks a ⇒ NoThunks (WithFingerprint a) | |||||
| type Rep (WithFingerprint a) | |||||
Defined in Ouroboros.Network.BlockFetch.ConsensusInterface type Rep (WithFingerprint a) = D1 ('MetaData "WithFingerprint" "Ouroboros.Network.BlockFetch.ConsensusInterface" "ouroboros-network-api-0.16.0.0-dbea09ae17e8c2f2c2bf8a649e0cc50d623284bdb4c27b8da54203349b774799" 'False) (C1 ('MetaCons "WithFingerprint" 'PrefixI 'True) (S1 ('MetaSel ('Just "forgetFingerprint") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a) :*: S1 ('MetaSel ('Just "getFingerprint") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Fingerprint))) | |||||
blockUntilChanged ∷ ∀ (m ∷ Type → Type) a b. (MonadSTM m, Eq b) ⇒ (a → b) → b → STM m a → STM m (a, b) Source #
Wait until the TVar changed
Arguments
| ∷ IOLike m | |
| ⇒ ResourceRegistry m | |
| → String | Label for the thread |
| → STM m (Maybe a) | |
| → (a → m ()) | |
| → m () |
Spawn a new thread that waits for an STM value to become Just
The thread will be linked to the registry.
Simulate various monad stacks in STM
simStateT ∷ ∀ (m ∷ Type → Type) st (n ∷ Type → Type). IOLike m ⇒ StrictTVar m st → Sim n m → Sim (StateT st n) m Source #
withTMVar
withTMVar ∷ IOLike m ⇒ StrictTMVar m a → (a → m (c, a)) → m c Source #
Apply f with the content of tv as state, restoring the original value when an
exception occurs
Arguments
| ∷ IOLike m | |
| ⇒ StrictTMVar m a | |
| → (a → STM m b) | Additional STM action to run in the same atomically block as the TMVar is acquired |
| → (a → b → m (c, a)) | Action |
| → m c |
Apply f with the content of tv as state, restoring the original value
when an exception occurs. Additionally run a STM action when acquiring the
value.