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.
|
| Methods | rnf :: a -> () | 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).
|
| | Instances | NFData Bool | | NFData Char | | NFData Double | | NFData Float | | NFData Int | | NFData Int8 | | NFData Int16 | | NFData Int32 | | NFData Int64 | | NFData Integer | | NFData Word | | NFData Word8 | | NFData Word16 | | NFData Word32 | | NFData Word64 | | NFData () | | NFData IntSet | | NFData a => NFData [a] | | (Integral a, NFData a) => NFData (Ratio a) | | (RealFloat a, NFData a) => NFData (Complex a) | | NFData a => NFData (Maybe a) | | NFData a => NFData (Tree a) | | NFData a => NFData (IntMap a) | | NFData a => NFData (Set a) | | (NFData a, NFData b) => NFData (Either a b) | | (NFData a, NFData b) => NFData (a, b) | | (Ix a, NFData a, NFData b) => NFData (Array a b) | | (NFData k, NFData a) => NFData (Map k a) | | (NFData a, NFData b, NFData c) => NFData (a, b, c) | | (NFData a, NFData b, NFData c, NFData d) => NFData (a, b, c, d) | | (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => NFData (a1, a2, a3, a4, a5) | | (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => NFData (a1, a2, a3, a4, a5, a6) | | (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => NFData (a1, a2, a3, a4, a5, a6, a7) | | (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8) => NFData (a1, a2, a3, a4, a5, a6, a7, a8) | | (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7, NFData a8, NFData a9) => NFData (a1, a2, a3, a4, a5, a6, a7, a8, a9) | |
|
|