
Am I right in thinking that there aren't currently any standard libraries for converting values to bitstreams and back, to be saved in files or squirted over network sockets or whatever to be resurrected later or elsewhere?
There is a 'Bits' library supplied with ghc, but it only gives you word-at-a-time operations, and instances only really make sense for fixed-size types like Int, Word, Float, Double, etc. A few years ago I spent a while developing a 'Binary' library which gives true bit-stream operations, where basically you can serialise any data structure to an arbitrary-length bit-stream. This library is supplied with nhc98, and Sven Panne ported it to ghc. I also adopted Noel Winstanley's standalone tool 'DrIFT' for automatically deriving instances of the Binary class, which answers one of your other questions. It is pretty easy to extend DrIFT to derive any class you might design. Web references: Binary: ftp://ftp.cs.york.ac.uk/pub/malcolm/ismm98.html Binary/GHC: http://www.pms.informatik.uni-muenchen.de/mitarbeiter/panne/haskell_libs/Bin... DrIFT: http://www.cs.york.ac.uk/fp/DrIFT/ Regards, Malcolm