úÎKèportablestablelibraries@haskell.org.A class of types that can be fully evaluated. >rnf should reduce its argument to normal form (that is, fully / evaluate all sub-components), and then return '()'. The default implementation of  is   rnf a = a `seq` () Dwhich may be convenient when defining instances for data types with , no unevaluated fields (e.g. enumerations). ;: fully evaluates the first argument, before returning the  second.  The name + is used to illustrate the relationship to :  where 8 is shallow in the sense that it only evaluates the top  level of its argument, % traverses the entire data structure  evaluating it completely. / 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 9 any order or in parallel. To impose an actual order on  evaluation, use pseq from Control.Parallel in the  parallel package. the deep analogue of . In the expression f $!! x, x is % fully evaluated before the function f is applied to it.  a variant of ' that is useful in some circumstances:   force x = x `deepseq` x force x fully evaluates x", and then returns it. Note that  force x, only performs evaluation when the value of force x E itself is demanded, so essentially it turns shallow evaluation into  deep evaluation.  deepseq-1.2.0.1Control.DeepSeqNFDatarnfdeepseq$!!forceghc-primGHC.PrimseqbasePrelude$!