store: Fast binary serialization

[ data, library, mit, serialization ] [ Propose Tags ]

Modules

[Last Documentation]

  • Data
    • Data.Store
      • Data.Store.Internal
      • Data.Store.Streaming
      • Data.Store.TH
        • Data.Store.TH.Internal
      • Data.Store.TypeHash
        • Data.Store.TypeHash.Internal
      • Data.Store.Version
  • System
    • IO
      • System.IO.ByteBuffer

Flags

Manual Flags

NameDescriptionDefault
comparison-benchDisabled
small-benchDisabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.2.0.0, 0.2.1.0, 0.2.1.1, 0.2.1.2, 0.3, 0.3.1, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.4.3.1, 0.4.3.2, 0.5.0, 0.5.0.1, 0.5.1.0, 0.5.1.1, 0.5.1.2, 0.6.0, 0.6.0.1, 0.6.1, 0.7.0, 0.7.1, 0.7.2, 0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8, 0.7.9, 0.7.10, 0.7.11, 0.7.12, 0.7.13, 0.7.14, 0.7.15, 0.7.16, 0.7.17, 0.7.18 (info)
Change log ChangeLog.md
Dependencies array (>=0.5.0.0 && <0.6), base (>=4.7 && <4.10), base-orphans (>=0.4.3 && <0.7), base64-bytestring (>=0.1.1 && <1.1), bytestring (>=0.10.4.0 && <0.11), conduit (>=1.2.3.1 && <1.3), containers (>=0.5.5.1 && <0.6), cryptohash (>=0.11.6 && <0.12), deepseq (>=1.3.0.2 && <1.5), directory (>=1.2 && <1.4), fail (>=4.9.0.0 && <4.10), filepath (>=1.3 && <1.5), ghc-prim (>=0.3.1.0 && <0.6), hashable (>=1.2.3.1 && <1.3), hspec (>=2.1.2 && <2.5), hspec-smallcheck (>=0.3.0 && <0.5), integer-gmp (>=0.5.1.0 && <1.1), lifted-base (>=0.2.3.3 && <0.3), monad-control (>=0.3.3.0 && <1.1), mono-traversable (>=0.7.0 && <1.1), primitive (>=0.6 && <0.6.2), resourcet (>=1.1.3.3 && <1.2), safe (>=0.3.8 && <0.4), semigroups (>=0.8 && <0.19), smallcheck (>=1.1.1 && <1.2), store-core (>=0.2.0.2 && <0.3), syb (>=0.4.4 && <0.8), template-haskell (>=2.9.0.0 && <2.12), text (>=1.2.0.4 && <1.3), th-lift (>=0.7.1 && <0.8), th-lift-instances (>=0.1.4 && <0.2), th-orphans (>=0.12.2 && <0.14), th-reify-many (>=0.1.6 && <0.2), th-utilities (>=0.2 && <0.3), time (>=1.4.2 && <1.9), transformers (>=0.3.0.0 && <0.6), unordered-containers (>=0.2.5.1 && <0.3), vector (>=0.10.12.3 && <0.13), void (>=0.5.11 && <0.8) [details]
License MIT
Copyright 2016 FP Complete
Author
Maintainer Michael Sloan <sloan@fpcomplete.com>
Revised Revision 2 made by HerbertValerioRiedel at 2017-04-15T23:58:14Z
Category Serialization, Data
Home page https://github.com/fpco/store#readme
Bug tracker https://github.com/fpco/store/issues
Source repo head: git clone https://github.com/fpco/store
Uploaded by borsboom at 2016-09-12T22:43:10Z
Distributions Arch:0.7.18, Debian:0.7.6, LTSHaskell:0.7.18, NixOS:0.7.18, Stackage:0.7.18
Reverse Dependencies 27 direct, 49 indirect [details]
Downloads 32643 total (165 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-11-20 [all 2 reports]

Readme for store-0.2.1.2

[back to package description]

store

The 'store' package provides efficient binary serialization. There are a couple features that particularly distinguish it from most prior Haskell serialization libraries:

  • Its primary goal is speed. By default, direct machine representations are used for things like numeric values (Int, Double, Word32, etc) and buffers (Text, ByteString, Vector, etc). This means that much of serialization uses the equivalent of memcpy.

    We have plans for supporting architecture independent serialization - see #36 and #31. This plan makes little endian the default, so that the most common endianness has no overhead.

  • Instead of implementing lazy serialization / deserialization involving multiple input / output buffers, peek an poke always work with a single buffer. This buffer is allocated by asking the value for its size before encoding. This simplifies the encoding logic, and allows for highly optimized tight loops.

  • store can optimize size computations by knowing when some types always use the same number of bytes. This allows us to compute the byte size of a Vector Int32 by just doing length v * 4.

It also features:

  • Optimized serialization instances for many types from base, vector, bytestring, text, containers, time, template-haskell, and more.

  • TH and GHC Generics based generation of Store instances for datatypes

  • TH generation of testcases.

Architecture limitations

Store does not currently work at all on architectures which lack efficient unaligned memory access (for example, older ARM processors). This is not a fundamental limitation, but we do not currently require ARM or PowerPC support. See #37 and #47.

Blog posts