courier- A message-passing library, intended for simplifying network applications

Portabilitynon-portable (requires STM)
Safe HaskellNone




Endpoints are a generalized abstraction for communication between parts of a program, whether on the same physical host or distributed over a network. Endpoints are intended to simplify the development of network-centric applications by providing a small transport-independent message-passing interface, and application writers can independently alter their implementation by enabling their Endpoints with different Transports without modifying the logic of their application that sends / receives Messages.



data Endpoint Source

Endpoints are a locus of communication, used for sending and receive messages.

newEndpoint :: [Transport] -> IO EndpointSource

Create a new Endpoint using the provided transports.

bindEndpoint :: Endpoint -> Name -> IO (Either String ())Source

Binding an Endpoint to a Name prepares the Endpoint to receive messages sent to the bound name. Upon success, the result will be Right (), but if failed, Left text-of-error-message.

unbindEndpoint :: Endpoint -> Name -> IO (Either String ())Source

Unbind an Endpoint from a Name, after which the Endpoint will eventually not receive messages sent to that Name. Note that there is no guarantee that after Unbind succeeds that additional messages to that Name will not be delivered: the only guarantee is that eventually messages will no longer be delivered. Upon success, the result will be Right () but if failed, Left text-of-error-message.

sendMessage :: Endpoint -> Name -> Message -> IO (Either String ())Source

Send a Message to specific Name via the indicated Endpoint. While a successful response (indicated by returning Right ()) indicates that there was no error initiating transport of the message, success does not guarantee that an Endpoint received the message. Failure initiating transport is indicated by returning Left text-of-error-message.

receiveMessage :: Endpoint -> IO MessageSource

Receive the next Message sent to the Endpoint.


Transports define specific implementations of message-passing techniques (e.g., memory-based, TCP, UDP, HTTP, etc.). Typical use of the Endpoints does not require direct use of Transports, beyond creating specific Transports (such as found in Network.Transport.Memory and Network.Transport.TCP) and adding them to an Endpoint.