@hackage binary-tagged0.2
Tagged binary serialisation.
Categories
License
BSD-3-Clause
Maintainer
Oleg Grenrus <oleg.grenrus@iki.fi>
Links
Versions
Installation
Tested Compilers
Dependencies (18)
- aeson >=0.8 && <1.5
- array >=0.5.0.0 && <0.6
- base >=4.7.0.2 && <4.14
- base16-bytestring >=0.1.1.6 && <0.2
- binary >=0.7.1.0 && <0.10
- bytestring >=0.10.4.0 && <0.11 Show all…
Dependents (3)
@hackage/stack, @hackage/flowdock-rest, @hackage/stackage-curator
Structurally tag binary serialisation stream.
Say you have:
data Record = Record
{ _recordFields :: HM.HashMap Text (Integer, ByteString)
, _recordEnabled :: Bool
}
deriving (Eq, Show, Generic)
instance Binary Record
instance HasStructuralInfo Record
instance HasSemanticVersion Record
then you can serialise and deserialise Record values with a structure tag by simply
encodeTaggedFile "cachefile" record decodeTaggedFile "cachefile" :: IO Record
If structure of Record changes in between, deserialisation will fail early.
The overhead is next to non-observable, see a simple benchmark.
benchmarking encode/Binary time 362.6 μs (361.2 μs .. 363.8 μs) benchmarking encode/Tagged time 379.2 μs (375.5 μs .. 382.2 μs) benchmarking decode/Binary time 366.3 μs (365.1 μs .. 368.1 μs) benchmarking decode/Tagged time 367.6 μs (367.0 μs .. 368.2 μs)