Portability | portable |
---|---|
Stability | stable |
Maintainer | libraries@haskell.org |
Provides an overloaded function deepseq
for fully evaluating data
structures.
Documentation
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.
The default implementation of deepseq
is simply seq
, which
may be convenient when defining instances for data types with
no unevaluated fields (e.g. enumerations).
class (DeepSeq a, Integral a) => DeepSeqIntegral a Source
class (DeepSeq a, Ord a) => DeepSeqOrd a Source