deepseq

Deep evaluation of data structures

Version on this page:1.4.3.0
LTS Haskell 22.41:1.4.8.1
Stackage Nightly 2024-11-10:1.5.1.0
Latest on Hackage:1.6.0.0

See all snapshots deepseq appears in

BSD-3-Clause licensed
Maintained by [email protected]
This version can be pinned in stack with:deepseq-1.4.3.0@sha256:b17e37d24feddc6c187869cc5ed68674cce6978960875ae4070f25ec925e2782,2821

Module documentation for 1.4.3.0

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.

Changes

Changelog for deepseq package

1.4.3.0 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)

1.4.2.0 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

1.4.1.2 Aug 2015

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

1.4.1.1 Mar 2015

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

1.4.1.0 Mar 2015

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

1.4.0.0 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
    

    by

    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*

1.3.0.2 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

1.3.0.1 Sep 2012

  • No changes

1.3.0.0 Feb 2012

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

1.2.0.1 Sep 2011

  • Disable SafeHaskell for GHC 7.2

1.2.0.0 Sep 2011

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

1.1.0.2 Nov 2010

  • Improve Haddock documentation

1.1.0.1 Oct 2010

  • Enable support for containers-0.4.x

1.1.0.0 Nov 2009

  • Major rewrite

1.0.0.0 Nov 2009

  • Initial release