OCaml batteries, now with GZip-ed channels
This week-end I've spent some time to kick-start my hacking onto OCaml Batteries Included (yes, it deserves a proper website).
Last time I
wrote about it was with my package maintainer hat on. In the
meantime I've got trapped
^Winvolved with upstream
development as well, after having been so fool to propose
Batteries' I/O channels of compression/decompression
Well, here are the first tiny teeny results:
# open Batteries.System;; # let i = File.open_in "/tmp/fstab.gz";; val i : InnerIO.input = <abstr> # let i2 = GZip.uncompress i;; val i2 : InnerIO.input = <abstr> # IO.read_line i2;; - : string = "# /etc/fstab: static file system information." # IO.read_line i2;; - : string = "#" # (* same goes for output of course *)
i.e., no matter how you created an I/O channel (and with
Batteries you can create it out of a lot of entities), you
can apply a
gzip compress/decompress filter.
The underlying library is Camlzip, which also sets a precedent on how to integrate external libraries into Batteries properly.
bzip2 ... of course with the same
interface, so that changing (de)compressor will be as easy as
s/GZip/BZip2/g in the code above.
zip will come next (but with different interfaces, as
old *nix jokes tell us, compressing and archiving are different