úÎNUIF'(c) The University of Glasgow 2001-2009 BSD-style (see the file LICENSE)libraries@haskell.orgstableportableSafe14KL9-A class of types that can be fully evaluated.Since: 1.1.0.0o should reduce its argument to normal form (that is, fully evaluate all sub-components), and then return '()'.  derivingVStarting with GHC 7.2, you can automatically derive instances for types possessing a  instance. ÿ{-# LANGUAGE DeriveGeneric #-} import GHC.Generics (Generic) import Control.DeepSeq data Foo a = Foo a String deriving (Eq, Generic) instance NFData a => NFData (Foo a) data Colour = Red | Green | Blue deriving Generic instance NFData Colour]Starting with GHC 7.10, the example above can be written more concisely by enabling the new DeriveAnyClass extension: ÷{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} import GHC.Generics (Generic) import Control.DeepSeq data Foo a = Foo a String deriving (Eq, Generic, NFData) data Colour = Red | Green | Blue deriving (Generic, NFData) Compatibility with previous deepseq versions<Prior to version 1.4.0.0, the default implementation of the  method was defined as  a =  a ()However, starting with deepseq-1.4.0.0*, the default implementation is based on DefaultSignatures* allowing for more accurate auto-derived ; instances. If you need the previously used exact default & method implementation semantics, use -instance NFData Colour where rnf x = seq x ()or alternatively F{-# LANGUAGE BangPatterns #-} instance NFData Colour where rnf !_ = ()Hidden internal type-classC: fully evaluates the first argument, before returning the second. The name + is used to illustrate the relationship to  : where P 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 any order or in parallel. To impose an actual order on evaluation, use pseq from Control.Parallel in the parallel package.Since: 1.1.0.0the deep analogue of . In the expression f $!! x, x) is fully evaluated before the function f is applied to it.Since: 1.2.0.0 a variant of & that is useful in some circumstances: force x = x `deepseq` xforce x fully evaluates x#, and then returns it. Note that force x, only performs evaluation when the value of force xW itself is demanded, so essentially it turns shallow evaluation into deep evaluation.. can be conveniently used in combination with  ViewPatterns: ¦{-# LANGUAGE BangPatterns, ViewPatterns #-} import Control.DeepSeq someFun :: ComplexData -> SomeResult someFun (force -> !arg) = {- 'arg' will be fully evaluated -})Another useful application is to combine  with 6 in order to force deep evaluation relative to other   operations: ·import Control.Exception (evaluate) import Control.DeepSeq main = do result <- evaluate $ force $ pureComputation {- 'result' will be fully evaluated at this point -} return ()Since: 1.2.0.0 Since: 1.4.0.0 Since: 1.4.0.0 Since: 1.4.0.0 Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0Since: 1.4.0.0 Since: 1.4.0.0!Since: 1.4.0.0"Since: 1.4.0.0#Since: 1.4.0.0$Since: 1.4.0.0%Since: 1.4.0.0&Since: 1.4.0.0'NOTE: Only defined for  base-4.8.0.0 and laterSince: 1.4.0.0(NOTE: Only defined for  base-4.8.0.0 and laterSince: 1.4.0.0)Since: 1.4.0.0*Since: 1.4.0.0+Since: 1.4.0.0,Since: 1.4.0.0-Since: 1.4.0.0.Since: 1.4.0.0/Since: 1.4.0.00Since: 1.4.0.01Since: 1.4.0.02Since: 1.4.0.03Since: 1.4.0.04Since: 1.4.0.05Since: 1.4.0.06Since: 1.3.0.076This instance is for convenience and consistency with <. This assumes that WHNF is equivalent to NF for functions.Since: 1.3.0.08Since: 1.3.0.09Since: 1.4.0.0: Defined as  = ;.Since: 1.4.0.0<Since: 1.4.0.0=Since: 1.4.0.0^>?@ABCDEF  !"#$%&'()*+,-./0123G45H6IJKL789:<=MNOPQRSTUVWXYZ[\]^_`ab\>?@ABCDEF  !"#$%&'()*+,-./0123G45H6IJKL789:<=MNOPQRSTUVWXYZ[\]^_`abc     !"#$%&'()*+,-./0123456789:;<=>?@ABCD EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmndeeps_HWuMT3APrGmLshhG5I7pfnControl.DeepSeqControl.ExceptionevaluateNFDatarnfdeepseq$!!forcebase GHC.GenericsGenericghc-primGHC.PrimseqGNFDataGHC.Base$! GHC.TypesIO$fNFDataCJmpBuf $fNFDataCFpos $fNFDataCFile$fNFDataCDouble$fNFDataCFloat$fNFDataCSUSeconds$fNFDataCUSeconds $fNFDataCTime$fNFDataCClock$fNFDataCUIntMax$fNFDataCIntMax$fNFDataCUIntPtr$fNFDataCIntPtr$fNFDataCULLong$fNFDataCLLong$fNFDataCSigAtomic$fNFDataCWchar $fNFDataCSize$fNFDataCPtrdiff$fNFDataCULong $fNFDataCLong $fNFDataCUInt $fNFDataCInt$fNFDataCUShort$fNFDataCShort$fNFDataCUChar$fNFDataCSChar $fNFDataCChar$fNFDataFingerprint $fNFDataTyCon$fNFDataTypeRep$fNFDataUnique$fNFDataThreadId$fNFDataStableName$fNFDataProduct $fNFDataSum $fNFDataAll $fNFDataAny $fNFDataLast $fNFDataFirst $fNFDataDual $fNFDataDown $fNFDataConst$fNFDataZipList$fNFDataVersion $fNFData(->) $fNFDataFixed$fNFDataNatural $fNFDataVoid Data.Voidabsurd$fNFDataIdentity $fNFDataProxygrnf$fNFData(,,,,,,,,)$fNFData(,,,,,,,)$fNFData(,,,,,,)$fNFData(,,,,,)$fNFData(,,,,) $fNFData(,,,) $fNFData(,,) $fNFData(,) $fNFDataArray $fNFData[]$fNFDataEither $fNFDataMaybe$fNFDataComplex $fNFDataRatio$fNFDataWord64$fNFDataWord32$fNFDataWord16 $fNFDataWord8 $fNFDataInt64 $fNFDataInt32 $fNFDataInt16 $fNFDataInt8 $fNFData() $fNFDataBool $fNFDataChar$fNFDataDouble $fNFDataFloat$fNFDataInteger $fNFDataWord $fNFDataInt $fGNFData:+: $fGNFData:*: $fGNFDataM1 $fGNFDataK1 $fGNFDataU1 $fGNFDataV1