Open pchiusano opened 9 years ago
@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 :).
Something that is nice about having
MonadGet
andMonadPut
as classes is you can use the same serialization logic for different purposes. For instance, you can create aMonadPut
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:
MonadPut
andMonadGet
. 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.MonadPut
andMonadGet
. 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?