Deep evaluation of data structures

Version on this page:
LTS Haskell 22.30:
Stackage Nightly 2024-07-21:
Latest on Hackage:

See all snapshots deepseq appears in

BSD-3-Clause licensed
Maintained by [email protected]
This version can be pinned in stack with:deepseq-,2298

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. See module documentation in Control.DeepSeq for more details.


Changelog for deepseq package


  • Adapt the rename of the Solo constructor to MkSolo (#87)
  • Add instances for the indexed TypeRep, along with Module. (#83)

  • Add NFData instance for MutableByteArray (#84)
  • Change RnfArgs to be a data family (#85)

  • Add instances for Solo (GHC-9) (#69)
  • Add once again infixr 0 deepseq (#56, #74)
  • Add NFData instance for ByteArray (#65)
  • Drop support for GHC 7 to simplify CPP (#75)

  • Revert infixr 0 deepseq; this does not appear in the version of deepseq pinned to GHC 9.2.1

  • Bundled with GHC 9.2.1
  • Remove instances for Data.Semigroup.Option for GHC >= 9.2 (#62)
  • Set the infixr 0 deepseq to be consistent with seq (#56)

  • Add GNFData for URec This will enable deriving NFData instances for unboxed types Sep 2018

  • Bundled with GHC 8.6.1

  • Add NFData instance for MaskingState (#38)

  • Define the NFData instances for TypeRep and TyCon on all supported versions of base, not just 4.8 and later (#40) Apr 2017

  • Bundled with GHC 8.2.1

  • Drop support for GHC 7.0 & GHC 7.2

  • Changed strictness behavior of generic NFData instances for constructor-less data types. Before, a generic rnf implementation would always error on a data type with no constructors. Now, it will force the argument, so if the argument is a diverging computation, a generic rnf implementation will actually trigger the diverging computation. (#19)

  • Add new rwhnf function defined as rwhnf !_ = () (#3)

  • Add (<$!!>) :: (Monad m, NFData b) => (a -> b) -> m a -> m b (#13)

  • Add NFData1 and NFData2 type classes (#8)

  • Add NFData instance for Down for base versions prior to base-4.6.0 which didn’t yet export it via Data.Ord (#28)

  • Add NFData instance for Foreign.C.Types.CBool (#33)

  • Add NFData instance for Ordering (#25)

  • Add NFData1 and NFData instances for Data.Functor.{Compose,Sum,Product} (#30)

  • Add NFData, NFData1, and NFData2 instances for (:~:) and (:~~:) from Data.Type.Equality (#31) 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