Skip to content

Thin type-safe layer for the Haskell Binary library.

License

Notifications You must be signed in to change notification settings

markus1189/binary-typed

 
 

Repository files navigation

Typed Binary lib

Standard Binary serializes to ByteString, which is an untyped format; deserialization of unexpected input usually results in unusable data.

This module is built around a Typed type, which allows serializing both a value and the type of that value; deserialization can then check whether the received data was sent assuming the right type, and error messages may provide insight into the type mismatch.

This package serves the same purpose as tagged-binary, with a couple of key differences:

  • Support of different kinds of serialized type annotations, each with specific strengths and weaknesses.

  • Error messages can provide details on type errors at the cost of longer message lengths to include the necessary information.

  • Very small performance overhead compared to using standard Binary due to caching when using hashed type information. Since shown and full types are not cached, decoding them has a significant performance hit (ballpark: factor of two).

  • No depencency on Internal modules of other libraries, and a very small dependency footprint in general.

For information about usage, see the Tutorial submodule.

Performance-wise, here is a value Right (Left <100 chars lipsum>) of type Either (Char, Int) (Either String (Maybe Integer)) benchmarked using the Hashed64 type representation:

More information can be found on the binary-typed Hackage page, or you can generate the documentation yourself (via cabal haddock).

About

Thin type-safe layer for the Haskell Binary library.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Haskell 97.9%
  • Shell 1.5%
  • Makefile 0.6%