ouroboros-consensus-0.1.0.1: Consensus layer for the Ouroboros blockchain protocol
Safe Haskell None
Language Haskell2010

Ouroboros.Consensus.Util.STM

Synopsis

Watcher

data Watcher m 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

  • wFingerprint :: a -> fp

    Obtain a fingerprint from a value of the monitored variable.

  • wInitial :: Maybe fp

    The initial fingerprint

    If Nothing , the action is executed once immediately to obtain the initial fingerprint.

  • wNotify :: a -> m ()

    An action executed each time the fingerprint changes.

  • wReader :: STM m a

    The variable to monitor.

forkLinkedWatcher Source #

Arguments

:: forall 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.

withWatcher Source #

Arguments

:: forall m a fp r. ( IOLike m, Eq fp, HasCallStack )
=> String

Label for the thread

-> Watcher m a fp
-> m r
-> m r

Spawn a new thread that runs a Watcher

The thread is bracketed via withAsync and link ed.

We do not provide the Async handle only because our anticipated use cases don't need it.

Misc

newtype Fingerprint Source #

Simple type that can be used to indicate something in a TVar is changed.

Instances

Instances details
Enum Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Eq Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Show Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Generic Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

NoThunks Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

type Rep Fingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

type Rep Fingerprint = D1 (' MetaData "Fingerprint" "Ouroboros.Consensus.Util.STM" "ouroboros-consensus-0.1.0.1-DT4Cvwf63DZKctsEvaJqCU" ' True ) ( C1 (' MetaCons "Fingerprint" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 Word64 )))

data WithFingerprint a Source #

Store a value together with its fingerprint.

Instances

Instances details
Functor WithFingerprint Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Eq a => Eq ( WithFingerprint a) Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Show a => Show ( WithFingerprint a) Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

Generic ( WithFingerprint a) Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

NoThunks a => NoThunks ( WithFingerprint a) Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

type Rep ( WithFingerprint a) Source #
Instance details

Defined in Ouroboros.Consensus.Util.STM

type Rep ( WithFingerprint a) = D1 (' MetaData "WithFingerprint" "Ouroboros.Consensus.Util.STM" "ouroboros-consensus-0.1.0.1-DT4Cvwf63DZKctsEvaJqCU" ' False ) ( C1 (' MetaCons "WithFingerprint" ' PrefixI ' True ) ( S1 (' MetaSel (' Just "forgetFingerprint") ' NoSourceUnpackedness ' SourceStrict ' DecidedStrict ) ( Rec0 a) :*: S1 (' MetaSel (' Just "getFingerprint") ' NoSourceUnpackedness ' SourceStrict ' DecidedStrict ) ( Rec0 Fingerprint )))

blockUntilChanged :: forall m a b. ( MonadSTM m, Eq b) => (a -> b) -> b -> STM m a -> STM m (a, b) Source #

Wait until the TVar changed

runWhenJust Source #

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

newtype Sim n m Source #

Constructors

Sim

Fields