This is a Haskell binding for the nanomsg library: http://nanomsg.org/.
There's support for (evented) blocking send and recv, a non-blocking receive,
and for all the socket types and the functions you need to wire
them up and tear them down again.
Most sockets options are available through accessor and mutator
functions. Sockets are typed, transports are not.