capnp-0.8.0.0: Cap'n Proto for Haskell
Safe HaskellNone
LanguageHaskell2010

Capnp.Rpc.Promise

Description

This module defines a Promise type, represents a value which is not yet available, and related utilities.

Synopsis

Documentation

data Promise a Source #

A promise is a value that may not be ready yet.

Instances

Instances details
Eq (Promise a) Source # 
Instance details

Defined in Capnp.Rpc.Promise

Methods

(==) :: Promise a -> Promise a -> Bool #

(/=) :: Promise a -> Promise a -> Bool #

data Fulfiller a Source #

A Fulfiller is used to fulfill a promise.

Creating promises

newPromise :: MonadSTM m => m (Promise a, Fulfiller a) Source #

Create a new promise and an associated fulfiller.

newPromiseWithCallback :: MonadSTM m => (Either Exception a -> STM ()) -> m (Promise a, Fulfiller a) Source #

Create a new promise which also excecutes an STM action when it is resolved.

newCallback :: MonadSTM m => (Either Exception a -> STM ()) -> m (Fulfiller a) Source #

Like newPromiseWithCallback, but doesn't return the promise.

Fulfilling or breaking promises

fulfill :: MonadSTM m => Fulfiller a -> a -> m () Source #

Fulfill a promise by supplying the specified value. It is an error to call fulfill if the promise has already been fulfilled (or broken).

breakPromise :: MonadSTM m => Fulfiller a -> Exception -> m () Source #

Break a promise. When the user of the promise executes wait, the specified exception will be raised. It is an error to call breakPromise if the promise has already been fulfilled (or broken).

breakOrFulfill :: MonadSTM m => Fulfiller a -> Either Exception a -> m () Source #

breakOrFulfill calls either breakPromise or fulfill, depending on the argument.

data ErrAlreadyResolved Source #

An exception thrown if breakPromise or fulfill is called on an already-resolved fulfiller.

Constructors

ErrAlreadyResolved 

Getting the value of a promise

wait :: MonadSTM m => Promise a -> m a Source #

Wait for a promise to resolve, and return the result. If the promise is broken, this raises an exception instead (see breakPromise).