The store package

[Tags:benchmark, library, mit, test]

[Skip to Readme]


Versions,,,,,, 0.3, 0.3.1, 0.4.0, 0.4.1, 0.4.2, 0.4.3, (info)
Change log
Dependencies array (>=, async (>=2.0.2), base (>=4.7 && <5), base-orphans (>=0.4.3), base64-bytestring (>=0.1.1), bytestring (>=, conduit (>=, containers (>=, contravariant (>=1.3), cryptohash (>=0.11.6), deepseq (>=, directory (>=1.2), filepath (>=1.3), free (>=4.11), ghc-prim (>=, hashable (>=, hspec (>=2.1.2), hspec-smallcheck (>=0.3.0), integer-gmp (>=, lifted-base (>=, monad-control (>=, mono-traversable (>=0.7.0), network (>=, primitive (>=0.6), resourcet (>=, safe (>=0.3.8), semigroups (>=0.8), smallcheck (>=1.1.1), store-core (==0.4.*), streaming-commons (>=, syb (>=0.4.4), template-haskell (>=, text (>=, th-lift (>=0.7.1), th-lift-instances (>=0.1.4), th-orphans (>=0.12.2), th-reify-many (>=0.1.6), th-utilities (>=0.2), time (>=1.4.2), transformers (>=, unordered-containers (>=, vector (>=, void (>=0.5.11) [details]
License MIT
Copyright 2016 FP Complete
Maintainer Michael Sloan <>
Category Serialization, Data
Home page
Bug tracker
Source repository head: git clone
Uploaded Tue May 9 00:44:47 UTC 2017 by MichaelSloan
Distributions Arch:, LTSHaskell:, NixOS:, Stackage:, Tumbleweed:0.3.1
Downloads 3046 total (1512 in the last 30 days)
0 []
Status Docs available [build log]
Last success reported on 2017-05-09 [all 1 reports]
Hackage Matrix CI





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


Maintainer's Corner

For package maintainers and hackage trustees

Readme for store

Readme for 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.

Blog posts