bytes icon indicating copy to clipboard operation
bytes copied to clipboard

Possibly create other `MonadGet` and `MonadPut` instances

Open pchiusano opened this issue 10 years ago • 1 comments

Something that is nice about having MonadGet and MonadPut as classes is you can use the same serialization logic for different purposes. For instance, you can create a MonadPut instance based on a cryptographic hash accumulator, and now your serialization code for your type doubles for creating hashes. Maybe a bit ad hoc, but it works great!

Here are a couple other ideas for instances:

  • A compressing MonadPut and MonadGet. So you write and read from it as normal, but it's doing incremental compression and decompression. Perhaps you can get the same thing serializing to a lazy bytestring, then compressing that, but it's probably faster to just have the instances do this directly.
  • An encrypting MonadPut and MonadGet. Again, you read and write as normal, but it's encrypting / decrypting as you go.

Not sure if you'd want include any of these in this package, but just wanted to get your thoughts. Maybe such instances belong in a separate package that depends on bytes?

pchiusano avatar Jul 30 '15 14:07 pchiusano

@pchiusano you might be interested in https://github.com/Ericson2314/haskell-vcache/blob/master/generic-store/hsrc_lib/Database/Generic.hs, the immutable subset I envision for exactly the sort of cross-platform content-addressable-store that you want Unison to use, supporting multiple back ends like https://github.com/mirage/irmin.

edit oh, and this does indeed extend bytes's monads to save me a lot of needless repetition :).

Ericson2314 avatar Dec 25 '15 02:12 Ericson2314