
Glynn Clements
George Russell wrote:
The general problem to solve is "How to we convert things to and from a binary format, so they can be efficiently written to and from disk". I have solved this (incompletely) twice myself,
Possibly the best way to handle this would be to extend the Storable class, e.g.
class Storable a where : [snip] : toByteArray :: a -> Array Int Word8 fromByteArray :: Array Int Word8 -> a
I wonder if this could be used to address a question (or perhaps "frustration" is a better term), namely that of efficient packing of data structures in memory. Would it be possible to separate binary I/O in two layers, the binary layer converting to/from (U?)Arrays of Word8, and another, the I/O layer, reading and writing such arrays? Something almost entirely, but not quite, unlike: class Binary a where toBin :: a -> Array Int Word8 toBinList :: [a] -> Array Int Word8 fromBin :: Array Int Word8 -> a -- perhaps with offset? fromBinList :: Array Int Word8 -> [a] hPutArray :: Handle -> Array Int Word8 -> IO () hGetArray :: ... writeBinaryFile :: FilePath -> Array Int Word8 -> IO () : -kzm -- If I haven't seen further, it is by standing in the footprints of giants