[Haskell-cafe] AMQP framing layer: design help requested.
agl at imperialviolet.org
Fri Mar 21 21:41:47 EDT 2008
On Fri, Mar 21, 2008 at 11:02 AM, Paul Johnson <paul at cogito.org.uk> wrote:
> This effectively duplicates the AmqpVariant solution. It would work,
> but it feels horrible. I get the feeling that there ought to be a
> better way, possibly using classes or existential types. Any suggestions?
Firstly, I would use the Get and Put monads directly, rather than
making them instances of Binary. I think, if I were doing it, I would
start off with something like this:
class AMQPValue a where
putAMQP :: a -> Put
instance AMQPValue Word8 where
putAMQP v = putWord8 1 >> putWord8 v
... (many instances)
instance (AMQPValue a) => AMQPValue [a] where
putAMQP vs = putWord8 (length vs) >> mapM_ putAMQP vs
You probably want a getAMQP member of the AMQPValue class too.
> getter <- fmap (amqpGetTable !) getWord8
> fmap (amqpGetTable !) getWord8
Hope that helps some
Adam Langley agl at imperialviolet.org http://www.imperialviolet.org
More information about the Haskell-Cafe