zeromq4-haskell-0.6.5: Bindings to ZeroMQ 4.x

Copyright(c) 2013 Toralf Wittner
LicenseMIT
MaintainerToralf Wittner <tw@dtex.org>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell98

System.ZMQ4.Monadic

Contents

Description

This modules exposes a monadic interface of ZMQ4. Actions run inside a ZMQ monad and Sockets are guaranteed not to leak outside their corresponding runZMQ scope. Running ZMQ computations asynchronously is directly supported through async.

Synopsis

Type Definitions

data ZMQ z a Source #

The ZMQ monad is modeled after ST and encapsulates a Context. It uses the uninstantiated type variable z to distinguish different invoctions of runZMQ and to prevent unintented use of Sockets outside their scope. Cf. the paper of John Launchbury and Simon Peyton Jones Lazy Functional State Threads.

Instances

MonadBase IO (ZMQ z) Source # 

Methods

liftBase :: IO α -> ZMQ z α #

MonadBaseControl IO (ZMQ z) Source # 

Associated Types

type StM (ZMQ z :: * -> *) a :: * #

Methods

liftBaseWith :: (RunInBase (ZMQ z) IO -> IO a) -> ZMQ z a #

restoreM :: StM (ZMQ z) a -> ZMQ z a #

Monad (ZMQ z) Source # 

Methods

(>>=) :: ZMQ z a -> (a -> ZMQ z b) -> ZMQ z b #

(>>) :: ZMQ z a -> ZMQ z b -> ZMQ z b #

return :: a -> ZMQ z a #

fail :: String -> ZMQ z a #

Functor (ZMQ z) Source # 

Methods

fmap :: (a -> b) -> ZMQ z a -> ZMQ z b #

(<$) :: a -> ZMQ z b -> ZMQ z a #

Applicative (ZMQ z) Source # 

Methods

pure :: a -> ZMQ z a #

(<*>) :: ZMQ z (a -> b) -> ZMQ z a -> ZMQ z b #

(*>) :: ZMQ z a -> ZMQ z b -> ZMQ z b #

(<*) :: ZMQ z a -> ZMQ z b -> ZMQ z a #

MonadIO (ZMQ z) Source # 

Methods

liftIO :: IO a -> ZMQ z a #

MonadThrow (ZMQ z) Source # 

Methods

throwM :: Exception e => e -> ZMQ z a #

MonadCatch (ZMQ z) Source # 

Methods

catch :: Exception e => ZMQ z a -> (e -> ZMQ z a) -> ZMQ z a #

MonadMask (ZMQ z) Source # 

Methods

mask :: ((forall a. ZMQ z a -> ZMQ z a) -> ZMQ z b) -> ZMQ z b #

uninterruptibleMask :: ((forall a. ZMQ z a -> ZMQ z a) -> ZMQ z b) -> ZMQ z b #

type StM (ZMQ z) a Source # 
type StM (ZMQ z) a = a

data Socket z t Source #

The ZMQ socket, parameterised by SocketType and belonging to a particular ZMQ thread.

Instances

data Flag Source #

Flags to apply on send operations (cf. man zmq_send)

Constructors

DontWait

ZMQ_DONTWAIT (Only relevant on Windows.)

SendMore

ZMQ_SNDMORE

Instances

Eq Flag Source # 

Methods

(==) :: Flag -> Flag -> Bool #

(/=) :: Flag -> Flag -> Bool #

Ord Flag Source # 

Methods

compare :: Flag -> Flag -> Ordering #

(<) :: Flag -> Flag -> Bool #

(<=) :: Flag -> Flag -> Bool #

(>) :: Flag -> Flag -> Bool #

(>=) :: Flag -> Flag -> Bool #

max :: Flag -> Flag -> Flag #

min :: Flag -> Flag -> Flag #

Show Flag Source # 

Methods

showsPrec :: Int -> Flag -> ShowS #

show :: Flag -> String #

showList :: [Flag] -> ShowS #

data Switch Source #

Configuration switch

Constructors

Default

Use default setting

On

Activate setting

Off

De-activate setting

data Event Source #

Socket events.

Constructors

In

ZMQ_POLLIN (incoming messages)

Out

ZMQ_POLLOUT (outgoing messages, i.e. at least 1 byte can be written)

Err
ZMQ_POLLERR

data Poll s m where Source #

A Poll value contains the object to poll (a 0MQ socket or a file descriptor), the set of Events which are of interest and--optionally-- a callback-function which is invoked iff the set of interested events overlaps with the actual events.

Constructors

Sock :: s t -> [Event] -> Maybe ([Event] -> m ()) -> Poll s m 
File :: Fd -> [Event] -> Maybe ([Event] -> m ()) -> Poll s m 

data KeyFormat a where Source #

Instances

Socket type-classes

class Subscriber a Source #

Sockets which can subscribe.

Instances

class SocketLike s Source #

Minimal complete definition

toSocket

Instances

class SendProbe a Source #

Sockets which can send probes (cf. setProbeRouter).

Socket Types

data Pair Source #

Constructors

Pair 

Instances

Eq Pair Source # 

Methods

(==) :: Pair -> Pair -> Bool #

(/=) :: Pair -> Pair -> Bool #

Generic Pair Source # 

Associated Types

type Rep Pair :: * -> * #

Methods

from :: Pair -> Rep Pair x #

to :: Rep Pair x -> Pair #

SocketType Pair Source # 
Receiver Pair Source # 
Sender Pair Source # 
type Rep Pair Source # 
type Rep Pair = D1 (MetaData "Pair" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Pair" PrefixI False) U1)

data Pub Source #

Constructors

Pub 

Instances

Eq Pub Source # 

Methods

(==) :: Pub -> Pub -> Bool #

(/=) :: Pub -> Pub -> Bool #

Generic Pub Source # 

Associated Types

type Rep Pub :: * -> * #

Methods

from :: Pub -> Rep Pub x #

to :: Rep Pub x -> Pub #

SocketType Pub Source # 
Conflatable Pub Source # 
Sender Pub Source # 
type Rep Pub Source # 
type Rep Pub = D1 (MetaData "Pub" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Pub" PrefixI False) U1)

data Sub Source #

Constructors

Sub 

Instances

Eq Sub Source # 

Methods

(==) :: Sub -> Sub -> Bool #

(/=) :: Sub -> Sub -> Bool #

Generic Sub Source # 

Associated Types

type Rep Sub :: * -> * #

Methods

from :: Sub -> Rep Sub x #

to :: Rep Sub x -> Sub #

SocketType Sub Source # 
Conflatable Sub Source # 
Receiver Sub Source # 
Subscriber Sub Source # 
type Rep Sub Source # 
type Rep Sub = D1 (MetaData "Sub" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Sub" PrefixI False) U1)

data XPub Source #

Constructors

XPub 

Instances

Eq XPub Source # 

Methods

(==) :: XPub -> XPub -> Bool #

(/=) :: XPub -> XPub -> Bool #

Generic XPub Source # 

Associated Types

type Rep XPub :: * -> * #

Methods

from :: XPub -> Rep XPub x #

to :: Rep XPub x -> XPub #

SocketType XPub Source # 
Receiver XPub Source # 
Sender XPub Source # 
type Rep XPub Source # 
type Rep XPub = D1 (MetaData "XPub" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "XPub" PrefixI False) U1)

data XSub Source #

Constructors

XSub 

Instances

Eq XSub Source # 

Methods

(==) :: XSub -> XSub -> Bool #

(/=) :: XSub -> XSub -> Bool #

Generic XSub Source # 

Associated Types

type Rep XSub :: * -> * #

Methods

from :: XSub -> Rep XSub x #

to :: Rep XSub x -> XSub #

SocketType XSub Source # 
Receiver XSub Source # 
Sender XSub Source # 
type Rep XSub Source # 
type Rep XSub = D1 (MetaData "XSub" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "XSub" PrefixI False) U1)

data Req Source #

Constructors

Req 

Instances

Eq Req Source # 

Methods

(==) :: Req -> Req -> Bool #

(/=) :: Req -> Req -> Bool #

Generic Req Source # 

Associated Types

type Rep Req :: * -> * #

Methods

from :: Req -> Rep Req x #

to :: Rep Req x -> Req #

SocketType Req Source # 
SendProbe Req Source # 
Receiver Req Source # 
Sender Req Source # 
type Rep Req Source # 
type Rep Req = D1 (MetaData "Req" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Req" PrefixI False) U1)

data Rep Source #

Constructors

Rep 

Instances

Eq Rep Source # 

Methods

(==) :: Rep -> Rep -> Bool #

(/=) :: Rep -> Rep -> Bool #

Generic Rep Source # 

Associated Types

type Rep Rep :: * -> * #

Methods

from :: Rep -> Rep Rep x #

to :: Rep Rep x -> Rep #

SocketType Rep Source # 
Receiver Rep Source # 
Sender Rep Source # 
type Rep Rep Source # 
type Rep Rep = D1 (MetaData "Rep" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Rep" PrefixI False) U1)

data Dealer Source #

Constructors

Dealer 

Instances

Eq Dealer Source # 

Methods

(==) :: Dealer -> Dealer -> Bool #

(/=) :: Dealer -> Dealer -> Bool #

Generic Dealer Source # 

Associated Types

type Rep Dealer :: * -> * #

Methods

from :: Dealer -> Rep Dealer x #

to :: Rep Dealer x -> Dealer #

SocketType Dealer Source # 
SendProbe Dealer Source # 
Conflatable Dealer Source # 
Receiver Dealer Source # 
Sender Dealer Source # 
type Rep Dealer Source # 
type Rep Dealer = D1 (MetaData "Dealer" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Dealer" PrefixI False) U1)

data Router Source #

Constructors

Router 

Instances

Eq Router Source # 

Methods

(==) :: Router -> Router -> Bool #

(/=) :: Router -> Router -> Bool #

Generic Router Source # 

Associated Types

type Rep Router :: * -> * #

Methods

from :: Router -> Rep Router x #

to :: Rep Router x -> Router #

SocketType Router Source # 
SendProbe Router Source # 
Receiver Router Source # 
Sender Router Source # 
type Rep Router Source # 
type Rep Router = D1 (MetaData "Router" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Router" PrefixI False) U1)

data Pull Source #

Constructors

Pull 

Instances

Eq Pull Source # 

Methods

(==) :: Pull -> Pull -> Bool #

(/=) :: Pull -> Pull -> Bool #

Generic Pull Source # 

Associated Types

type Rep Pull :: * -> * #

Methods

from :: Pull -> Rep Pull x #

to :: Rep Pull x -> Pull #

SocketType Pull Source # 
Conflatable Pull Source # 
Receiver Pull Source # 
type Rep Pull Source # 
type Rep Pull = D1 (MetaData "Pull" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Pull" PrefixI False) U1)

data Push Source #

Constructors

Push 

Instances

Eq Push Source # 

Methods

(==) :: Push -> Push -> Bool #

(/=) :: Push -> Push -> Bool #

Generic Push Source # 

Associated Types

type Rep Push :: * -> * #

Methods

from :: Push -> Rep Push x #

to :: Rep Push x -> Push #

SocketType Push Source # 
Conflatable Push Source # 
Sender Push Source # 
type Rep Push Source # 
type Rep Push = D1 (MetaData "Push" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Push" PrefixI False) U1)

data Stream Source #

Constructors

Stream 

Instances

Eq Stream Source # 

Methods

(==) :: Stream -> Stream -> Bool #

(/=) :: Stream -> Stream -> Bool #

Generic Stream Source # 

Associated Types

type Rep Stream :: * -> * #

Methods

from :: Stream -> Rep Stream x #

to :: Rep Stream x -> Stream #

SocketType Stream Source # 
Receiver Stream Source # 
Sender Stream Source # 
type Rep Stream Source # 
type Rep Stream = D1 (MetaData "Stream" "System.ZMQ4" "zeromq4-haskell-0.6.5-5hxtMbtbk3xLhiilYUGMmF" False) (C1 (MetaCons "Stream" PrefixI False) U1)

General Operations

runZMQ :: MonadIO m => (forall z. ZMQ z a) -> m a Source #

Return the value computed by the given ZMQ monad. Rank-2 polymorphism is used to prevent leaking of z. An invocation of runZMQ will internally create a Context and all actions are executed relative to this context. On finish the context will be disposed, but see async.

async :: ZMQ z a -> ZMQ z (Async a) Source #

Run the given ZMQ computation asynchronously, i.e. this function runs the computation in a new thread using async. N.B. reference counting is used to prolong the lifetime of the Context encapsulated in ZMQ as necessary, e.g.:

runZMQ $ do
    s <- socket Pair
    async $ do
        liftIO (threadDelay 10000000)
        identity s >>= liftIO . print

Here, runZMQ will finish before the code section in async, but due to reference counting, the Context will only be disposed after async finishes as well.

socket :: SocketType t => t -> ZMQ z (Socket z t) Source #

ZMQ Options (Read)

ZMQ Options (Write)

Socket operations

close :: Socket z t -> ZMQ z () Source #

bind :: Socket z t -> String -> ZMQ z () Source #

unbind :: Socket z t -> String -> ZMQ z () Source #

connect :: Socket z t -> String -> ZMQ z () Source #

disconnect :: Socket z t -> String -> ZMQ z () Source #

send :: Sender t => Socket z t -> [Flag] -> ByteString -> ZMQ z () Source #

send' :: Sender t => Socket z t -> [Flag] -> ByteString -> ZMQ z () Source #

proxy :: Socket z a -> Socket z b -> Maybe (Socket z c) -> ZMQ z () Source #

poll :: (SocketLike s, MonadIO m) => Timeout -> [Poll s m] -> m [[Event]] Source #

Polls for events on the given Poll descriptors. Returns a list of events per descriptor which have occured. (cf. zmq_poll)

Socket Options (Read)

delayAttachOnConnect :: Socket z t -> ZMQ z Bool Source #

Deprecated: Use immediate

events :: Socket z t -> ZMQ z [Event] Source #

ipv4Only :: Socket z t -> ZMQ z Bool Source #

Deprecated: Use ipv6

ipv6 :: Socket z t -> ZMQ z Bool Source #

linger :: Socket z t -> ZMQ z Int Source #

rate :: Socket z t -> ZMQ z Int Source #

Socket Options (Write)

setAffinity :: Word64 -> Socket z t -> ZMQ z () Source #

setBacklog :: Integral i => Restricted (N0, Int32) i -> Socket z t -> ZMQ z () Source #

setConflate :: Conflatable t => Bool -> Socket z t -> ZMQ z () Source #

setCurveServer :: Bool -> Socket z t -> ZMQ z () Source #

setDelayAttachOnConnect :: Bool -> Socket z t -> ZMQ z () Source #

Deprecated: Use setImmediate

setImmediate :: Bool -> Socket z t -> ZMQ z () Source #

setIpv4Only :: Bool -> Socket z t -> ZMQ z () Source #

Deprecated: Use setIpv6

setIpv6 :: Bool -> Socket z t -> ZMQ z () Source #

setLinger :: Integral i => Restricted (Nneg1, Int32) i -> Socket z t -> ZMQ z () Source #

setMcastHops :: Integral i => Restricted (N1, Int32) i -> Socket z t -> ZMQ z () Source #

setPlainServer :: Bool -> Socket z t -> ZMQ z () Source #

setProbeRouter :: SendProbe t => Bool -> Socket z t -> ZMQ z () Source #

setRate :: Integral i => Restricted (N1, Int32) i -> Socket z t -> ZMQ z () Source #

setSendBuffer :: Integral i => Restricted (N0, Int32) i -> Socket z t -> ZMQ z () Source #

setSendHighWM :: Integral i => Restricted (N0, Int32) i -> Socket z t -> ZMQ z () Source #

Error Handling

data ZMQError Source #

ZMQError encapsulates information about errors, which occur when using the native 0MQ API, such as error number and message.

errno :: ZMQError -> Int Source #

Error number value.

source :: ZMQError -> String Source #

Source where this error originates from.

message :: ZMQError -> String Source #

Actual error message.

Re-exports

liftIO :: MonadIO m => forall a. IO a -> m a #

Lift a computation from the IO monad.

restrict :: Restriction r v => v -> Restricted r v Source #

Create a restricted value. If the given value does not satisfy the restrictions, a modified variant is used instead, e.g. if an integer is larger than the upper bound, the upper bound value is used.

toRestricted :: Restriction r v => v -> Maybe (Restricted r v) Source #

Create a restricted value. Returns Nothing if the given value does not satisfy all restrictions.

Low-level Functions

waitRead :: Socket z t -> ZMQ z () Source #

waitWrite :: Socket z t -> ZMQ z () Source #