[Haskell-cafe] Binary parser combinators and pretty printing

Einar Karttunen ekarttun at cs.helsinki.fi
Thu Sep 15 16:20:23 EDT 2005


On 15.09 21:53, Bulat Ziganshin wrote:
> EK> data Packet = Packet Word32 Word32 Word32 [FastString]
> 
> well. you can see my own BinaryStream package at http://freearc.narod.ru
> 
> class BinaryData a where
>   read :: ...
>   write :: ...

I don't think this is a very good solution. Keeping the on-wire datatypes 
explicit makes sense to me. Also things like endianess will need to be 
taken into account. If the encoding is derived automatically then 
changing the Haskell datatype will change the on-wire representation.
This is not wanted when interfacing with external protocols.

For typeclasses I would rather have:
getWord32BE :: Num a => MyMonad a
than
get :: MyClass a => MyMonad a

Note the difference between the Haskell type determining the on-wire 
type and it being explicit. I already have working TH code for the 
case where I want to derive automatic binary serialization for 
Haskell datatypes (SerTH).

> EK> Maybe even the tuple could be eliminated by using a little of TH.
> 
> it may be eliminated even without TH! :+: and :*: should work,
> although i don't tried this

I don't know how generics work in newer versions of GHC, but 
it may be worth investigating.

- Einar Karttunen



More information about the Haskell-Cafe mailing list