Deep evaluation of data structures

Version on this page:
LTS Haskell 8.2:
Stackage Nightly 2017-02-22:
Latest on Hackage:
BSD3 licensed
Maintained by

Module documentation for

This package provides methods for fully evaluating data structures ("deep evaluation"). Deep evaluation is often used for adding strictness to a program, e.g. in order to force pending exceptions, remove space leaks, or force lazy I/O to happen. It is also useful in parallel programs, to ensure pending work does not migrate to the wrong thread.

The primary use of this package is via the deepseq function, a "deep" version of seq. It is implemented on top of an NFData typeclass ("Normal Form Data", data structures with no unevaluated components) which defines strategies for fully evaluating different data types.


Changelog for deepseq package Apr 2016

  • Bundled with GHC 8.0.1

  • New instances for types provided by semigroups prior to base-4.9 (i.e. NonEmpty, Min, Max, Arg, Semigroup.First, Semigroup.Last, WrappedMonoid, and Option) (#11)

  • New instances for Ptr and FunPtr (#10)

  • New instances for IORef, STRef, and MVar (#6)

  • New instance for ExitCode (#4)

  • New instances for CallStack and SrcLoc

  • Make NFData (Proxy a) instance poly-kinded Aug 2015

  • Avoid the broken combination of GHC-7.2 with array>=0.4 (#7) Mar 2015

  • Bundled with GHC 7.10.1
  • Drop redundant ghc-prim dependency Mar 2015

  • Drop redundant constraints from a few NFData instances (if possible for a given base version) Dec 2014

  • Switch to Generics based DefaultSignature rnf method implementation (based on code from deepseq-generics)

    Compatibility Note: if you need the exact default-method semantics of deepseq prior to 1.4, replace occurences of

    instance NFData XYZ


    instance NFData XYZ where rnf x = seq x ()
  • New NFData instances for base types:

    • Control.Applicative.Const
    • Control.Applicative.ZipList
    • Control.Concurrent.ThreadId
    • Data.Functor.Identity.Identity
    • Data.Monoid.{Dual,First,Last,Any,All,Sum,Product}
    • Data.Ord.Down
    • Data.Proxy.Proxy
    • Data.Typeable.Internal.TyCon
    • Data.Typeable.Internal.TypeRep
    • Data.Unique.Unique
    • Data.Void.Void
    • GHC.Fingerprint.Type.Fingerprint
    • Numeric.Natural.Natural
    • System.Mem.StableName.StableName
    • Foreign.C.Types.C* Nov 2013

  • Bundled with GHC 7.8.1
  • Update package description to Cabal 1.10 format
  • Add support for GHC 7.8
  • Drop support for GHCs older than GHC 7.0.1
  • Add /since: .../ annotations to Haddock comments
  • Add changelog Sep 2012

  • No changes Feb 2012

  • Add instances for Fixed, a->b and Version Sep 2011

  • Disable SafeHaskell for GHC 7.2 Sep 2011

  • New function force
  • New operator $!!
  • Add SafeHaskell support
  • Dropped dependency on containers Nov 2010

  • Improve Haddock documentation Oct 2010

  • Enable support for containers-0.4.x Nov 2009

  • Major rewrite Nov 2009

  • Initial release
Depends on:
Used by 656 packages:
AERN-Basics, AERN-Real-Interval, Agda, BNFC, BenchmarkHistory, Biobase, BiobaseTypes, BiobaseXNA, CV, Cabal, Cabal-ide-backend, Combinatorrent, CoreFoundation, DCFL, Dao, DataTreeView, Decimal, DifferentialEvolution, EnumContainers, Etage-Graph, Euterpea, FComp, FixedPoint-simple, FontyFruity, GTALib, GenI, GlomeView, Grow, HLearn-algebra, HLearn-classification, HLearn-datastructures, HLearn-distributions, HStringTemplate, HTab, HUnit, HarmTrace, Hayoo, HerbiePlugin, HiggsSet, Holumbus-Distribution, Holumbus-MapReduce, Holumbus-Searchengine, IntervalMap, JYU-Utils, JuicyPixels, LambdaHack, LinguisticsTypes, ListLike, NaturalLanguageAlphabets, Nomyx-Core, PrimitiveArray, RNAFold, RNAwolf, SBench, Spock-api, TBC, TBit, UISF, WordAlignment, Yampa, Yampa-core, abstract-par, activehs, aeson, aeson-injector, aeson-native, aeson-quick, alex-tools, amazonka-core, amazonka-s3-streaming, amrun, antigate, apelsin, api-tools, apis, approximate, arbtt, archlinux-web, ascii-vector-avc, async-extra, atto-lisp, attoparsec, audacity, audiovisual, auto, aws-general, aws-kinesis, bake, basic-sop, bayes-stack, bed-and-breakfast, bencoding, bimaps, binary-list, binary-store, bind-marshal, biostockholm, bitcoin-hs, bitcoin-payment-channel, bitset, bittorrent, bitx-bitcoin, blacktip, blaze-builder, bloomfilter, bond-haskell, bower-json, brick, buchhaltung, buildwrapper, burst-detection, bytestring, bytestring-builder, bytestring-plain, bytestring-short, bytestring-typenats, cabal-debian, cabal2nix, cake3, call, canonical-filepath, case-insensitive, cash, cassava, cg, chatter, chp, chp-plus, chp-spec, chronograph, clash-ghc, clash-lib, clash-prelude, classy-prelude, clifford, cognimeta-utils, coinbase-exchange, command, compact-socket, compdata, compensated, comptrans, computational-algebra, configuration-tools, constraints, containers, containers-benchmark, containers-deepseq, control-invariants, convert-annotation, cookie, cpuinfo, cqrs-core, cqrs-example, cqrs-postgresql, cqrs-testkit, critbit, criterion, criterion-plus, crocodile, cryptol, cryptonite, cryptsy-api, csound-expression-typed, dao, data-checked, data-clist, data-interval, data-msgpack, data-pprint, data-r-tree, data-size, data-store, data-stringmap, data-structure-inferrer, ddc-base, ddc-build, ddc-core, ddc-core-eval, ddc-core-flow, ddc-core-salt, ddc-core-simpl, ddc-core-tetra, ddc-driver, ddc-source-tetra, deepseq-bounded, deepseq-generics, deepseq-th, definitive-base, definitive-filesystem, definitive-graphics, definitive-parser, definitive-reactive, definitive-sound, dense, dia-base, dia-functions, dimensional, dingo-core, diplomacy-server, directed-cubical, discrimination, distributed-process, distributed-process-async, distributed-process-client-server, distributed-process-execution, distributed-process-extras, distributed-process-lifted, distributed-process-platform, distributed-process-registry, distributed-process-supervisor, distributed-process-task, distributed-process-zookeeper, distributed-static, distribution-nixpkgs, dlist, doctest, double-extra, dpor, dustme, dynamic-plot, easy-bitcoin, edenmodules, enclosed-exceptions, encoding-io, enumerate, enummapmap, enummapset, enummapset-th, estimators, euphoria, eventloop, exference, exherbo-cabal, exinst-deepseq, exp-pairs, explicit-exception, exposed-containers, extended-reals, factory, fast-tags, feldspar-language, fgl, filesystem-trees, finite-field, finite-typelits, fixed-vector, fixed-vector-hetero, fixhs, flaccuraterip, flowdock-rest, foldl-incremental, forest, fpco-api, fpnla-examples, friday, friday-devil, genvalidity-hspec-aeson, genvalidity-hspec-cereal, ghc-datasize, ghc-mod, ghc-vis, ghci, github, glicko, glpk-hs, gnuplot, gore-and-ash, gore-and-ash-actor, gore-and-ash-async, gore-and-ash-demo, gore-and-ash-glfw, gore-and-ash-lambdacube, gore-and-ash-logging, gore-and-ash-network, gore-and-ash-sdl, gore-and-ash-sync, gpah, graph-core, grouped-list, hBDD-CMUBDD, hBDD-CUDD, hPDB, hPDB-examples, hackage-server, hackport, haddock-api, haddock-library, hakyll, hamtmap, hashmap, haskell-course-preludes, haskell-packages, haskell-platform-test, haskhol-core, haskoin, haskoin-core, haskoin-node, haskoin-wallet, hats, haxl, hblock, hdbi, hdph, hdph-closure, hdr-histogram, hedis, hedn, helium-overture, hemokit, heukarya, hexpat, hexpat-lens, hgeometry, hidapi, hindent, hinduce-associations-apriori, hip, histogram-fill, hledger-lib, hmatrix, hmatrix-tests, hnix, hobbits, homplexity, hoogle, hopfield, hops, hourglass, hpack, hpack-convert, hpath, hs-GeoIP, hs-carbon, hs-carbon-examples, hscope, hsdev, hset, hspec-core, hspec-expectations-pretty, hspec-meta, hsqml-demo-morris, hsqml-morris, html-parse, http-client, hunt-searchengine, hunt-server, hxt, hxt-binary, hxt-cache, hybrid-vectors, hyper, hyper-haskell-server, hyperloglog, identifiers, idris, imperative-edsl, implicit, inf-interval, inline-r, instant-deepseq, interval, intro, introduction, intset, ixset-typed, jsaddle, json-rpc, json-rpc-server, kdt, keysafe, knots, krapsh, lambdacube-compiler, language-conf, language-eiffel, language-hcl, language-java-classfile, language-lua, language-nix, lattices, learning-hmm, leksah, leksah-server, libconfig, libcspm, lifted-protolude, linear, linkedhashmap, liquid-fixpoint, liquidhaskell, llvm-analysis, llvm-base-types, llvm-data-interop, log-base, log-domain, log-elasticsearch, log-postgres, lol, lol-apps, lol-benches, lol-cpp, lol-repa, lrucaching, lvish, macosx-make-standalone, magma, manifolds, marked-pretty, marvin, math-functions, mathblog, matrices, matrix, maxent-learner-hw, megaparsec, memory, messagepack, meta-par, model, monad-lgbt, monad-par, monad-par-extras, monad-stlike-io, monoidal-containers, morte, msgpack, msgpack-aeson, myTestlll, netrc, netwire, network-topic-models, network-transport, network-uri, neural, neural-network-hmatrix, nf, non-empty, normalization-insensitive, numeric-prelude, optimal-blocks, orc, packed-dawg, pacman-memcache, pagination, pandoc, pandoc-types, parallel, parallel-tasks, parconc-examples, parsestar, path, pathtype, pcd-loader, pec, persistent-vector, pgstream, picoparsec, pinch, pipes-protolude, planar-graph, polynomial, polysoup, pooled-io, pqueue, praglude, pregame, preprocess-haskell, pretty, process, process-extras, process-listlike, process-progress, processor-creative-kit, progress-reporting, protobuf, protolude, pseudo-boolean, psi, psqueues, purescript, pusher-ws, pvss, qed, raaz, range-set-list, rawr, raz, rdf, rdf4h, react-flux, react-haskell, rebase, regex-deriv, regex-pderiv, regexdot, regular-extras, repa-v4l2, reroute, riak, rose-trees, rose-trie, roshask, rosso, rsagl, rsagl-math, rss2irc, rtorrent-rpc, ruin, safe-exceptions, safe-exceptions-checked, safe-money, sarasvati, satchmo, sbv, scientific, scion-browser, scrabble-bot, second-transfer, semigroups, semver, serokell-util, set-monad, sgd, shake, should-not-typecheck, sibe, sign, silently, simple-atom, simple-genetic-algorithm, simple-genetic-algorithm-mr, simple-log, simple-neural-networks, sized, sized-vector, sizes, smallarray, smallstring, som, sorted-list, sparse, special-keys, splaytree, spoon, sstable, stache, stack, statistics, statistics-dirichlet, stgi, storablevector, store, streaming-bytestring, strict-base-types, strict-concurrency, strict-data, strict-io, strictly, structs, structures, subhask, svm-simple, swapper, symbol, syntactic, synthesizer-core, synthesizer-midi, system-filepath, tables, tagged, tamarin-prover, tamarin-prover-term, tamarin-prover-theory, tamarin-prover-utils, tar, tasty, tasty-golden, tasty-program, tasty-silver, tdigest, test-framework-quickcheck, testbench, tex2txt, text, text-icu, text-normal, text-zipper, these, threadscope, threepenny-gui, thyme, tiempo, time, time-exts, time-warp, timeout-with-results, toolshed, toysolver, trace, treemap, tremulous-query, tries, trifecta, twentyseven, twiml, typeparams, tz, tzdata, uhttpc, unbound-generics, uniform-pair, union, units, universum, unordered-containers, unordered-graphs, uom-plugin, ureader, uri-conduit, uuid-types, vacuum-cairo, vampire, vector, vector-buffer, vector-bytestring, vector-sized, vector-strategies, vectortiles, verbosity, vimus, void, vty, vty-examples, wai-extra, weigh, why3, wide-word, wires, wl-pprint-annotated, word24, wordpass, workflow-types, wrecker, x86-64bit, xml-conduit, xml-types, yaml-config, yarr, yesod-bin, yesod-core, yet-another-logger, yi-rope, yuuko, zmidi-score, zstd
comments powered byDisqus