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