deepseq-1.1.0.0: Fully evaluate data structuresContentsIndex
Control.DeepSeq
Portabilityportable
Stabilitystable
Maintainerlibraries@haskell.org
Description
Provides an overloaded function deepseq for fully evaluating data structures.
Synopsis
deepseq :: NFData a => a -> b -> b
class NFData a where
rnf :: a -> ()
Documentation
deepseq :: NFData a => a -> b -> b

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.

class NFData a where
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).

show/hide 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)
Produced by Haddock version 2.7.2