BSD-3-Clause licensed and maintained by Oleg Grenrus
This version can be pinned in stack with:binary-tagged-0.1.5@sha256:d7e3554ea16371c947b9eb023f90b3946e111333ba0398812b858c57c058ad6d,3030

Module documentation for 0.1.5

binary-tagged

Build Status Hackage Stackage LTS 2 Stackage LTS 3 Stackage Nightly

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 and the results.

Changes

  • 0.1.5 (2018-05-20)
    • GHC-8.4.2
    • Don’t depend on nats and semigroups on newer GHC
  • 0.1.4.2 (2016-12-05)
    • Fix compilation with generics-sop-0.2.3.0
  • 0.1.4.1 (2016-09-20)
    • Print mismatching hashes in base16 encoding
  • 0.1.4.0 (2016-04-12)
    • Add semigroups types
    • Add Natural
  • 0.1.3.1 (2016-02-10)
    • Support GHC 8.0
  • 0.1.3.0 (2015-10-24)
    • Support generics-sop-0.2
  • 0.1.2.0 (2015-10-06)
    • Add tuple HasSemanticVersion instances
    • Add instances for
      • ()
      • Float
      • Double
      • Version`
      • Fixed
      • Ordering
    • Fix Interleave & SumUpTo, introduce Div2
  • 0.1.1.0
    • Add instances
      • Ratio
      • Word
      • HasSemanticVersion for primitive types