Portability | portable |
---|---|
Stability | stable |
Maintainer | libraries@haskell.org |
Provides an overloaded function deepseq
for fully evaluating data
structures.
Documentation
deepseq :: NFData a => a -> b -> bSource
Fully evaluates its argument. The name deepseq
is used to
illustrate the relationship to seq
: where seq
is shallow in
the sense that it only evaluates the top level of its argument,
deepseq
traverses the entire data structure evaluating it
completely.
deepseq
can be useful for forcing pending exceptions,
eradicating space leaks, or forcing lazy I/O to happen. It is
also useful in conjunction with parallel Strategies (see the
parallel
package).
There is no guarantee about the ordering of evaluation. The
implementation may evaluate the components of the structure in
any order or in parallel. To impose an actual order on
evaluation, use pseq
from Control.Parallel in the
parallel
package.
rnf should reduce its argument to normal form (that is, fully evaluate all sub-components), and then return '()'.
The default implementation of rnf
is
rnf a = a `seq` ()
which may be convenient when defining instances for data types with no unevaluated fields (e.g. enumerations).