!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'(c) The University of Glasgow 2001-2009 BSD-style (see the file LICENSE)libraries@haskell.orgstableportableSafe&',7;<=>?FSTdJdeepseq2A class of bifunctors that can be fully evaluated.deepsequ should reduce its argument to normal form (that is, fully evaluate all sub-components), given functions to reduce a and b. arguments respectively, and then return '()'.Note: Unlike for the unary :, there is currently no support for generically deriving .deepseq0A class of functors that can be fully evaluated.deepseqv should reduce its argument to normal form (that is, fully evaluate all sub-components), given an argument to reduce a" arguments, and then return '()'.See  for the generic deriving.deepseq-A class of types that can be fully evaluated.deepseqo 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.Note: * can be auto-derived starting with GHC 7.4 :{-# LANGUAGE DeriveGeneric #-} import GHC.Generics (Generic, Generic1) import Control.DeepSeq data Foo a = Foo a String deriving (Eq, Generic, Generic1) instance NFData a => NFData (Foo a) instance NFData1 Foo 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, Generic1, NFData, NFData1) 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 (instance NFData Colour where rnf = rwhnfor F{-# LANGUAGE BangPatterns #-} instance NFData Colour where rnf !_ = ()deepseqHidden internal type-classdeepseqC: 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.deepseqthe deep analogue of . In the expression f $!! x, x) is fully evaluated before the function f is applied to it.deepseq 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 ()1Finally, here's an exception safe variant of the  readFile' example: readFile' :: FilePath -> IO String readFile' fn = bracket (openFile fn ReadMode) hClose $ \h -> evaluate . force =<< hGetContents h deepseqDeeply strict version of . deepseqReduce to weak head normal formEquivalent to \x ->  x ().Useful for defining # for types for which NF=WHNF holds. 9data T = C1 | C2 | C3 instance NFData T where rnf = rwhnf deepseqLift the standard ' function through the type constructor. deepseqLift the standard ' function through the type constructor.deepseqdeepseqdeepseqdeepseqdeepseq deepseq!deepseq"deepseq#deepseq$deepseq%deepseq&deepseq'deepseq(deepseq)deepseq*deepseq+deepseq,deepseq-deepseq.deepseq/deepseq0deepseq1deepseq2deepseq3deepseq4deepseq5deepseq6deepseq7deepseq8deepseq9deepseq:deepseq;deepseq<deepseq=deepseq>deepseq?deepseq@deepseqAdeepseqBdeepseqCdeepseqDdeepseqEdeepseqFdeepseqNOTE<: Only strict in the reference and not the referenced value.GdeepseqNOTE<: Only strict in the reference and not the referenced value.HdeepseqNOTE<: Only strict in the reference and not the referenced value.IdeepseqNOTE : Prior to deepseq-1.4.4.0$ this instance was only defined for  base-4.8.0.0 and later.JdeepseqNOTE : Prior to deepseq-1.4.4.0$ this instance was only defined for  base-4.8.0.0 and later.KdeepseqLdeepseqMdeepseqNdeepseqOdeepseqPdeepseqQdeepseqRdeepseqSdeepseqTdeepseqUdeepseqWdeepseqXdeepseqZdeepseq_deepseq6This instance is for convenience and consistency with <. This assumes that WHNF is equivalent to NF for functions.`deepseqadeepseqbdeepseq Defined as  = .cdeepseqddeepseqedeepseqfdeepseqgdeepseqzdeepseq{deepseq|deepseq}deepseq~deepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseq Available on  base >=4.9deepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseq     0 4Safe      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&deepseq-1.4.4.0-5W2fvPjT6kECCDkICNBpSiControl.DeepSeqControl.ExceptionevaluateControl.DeepSeq.BackDoorNFData2liftRnf2NFData1liftRnfNFDatarnfdeepseq$!!force<$!!>rwhnfrnf1rnf2$fGNFDataOnePar1$fGNFDataarity:+:$fGNFDataarity:*:$fGNFDataarityM1$fGNFDataarityU1$fGNFDataarityV1$fNFData(,,,,,,,,)$fNFData(,,,,,,,)$fNFData(,,,,,,)$fNFData(,,,,,)$fNFData(,,,,) $fNFData(,,,) $fNFData(,,) $fNFData(,)$fNFDataCallStack$fNFDataSrcLoc$fNFDataOption$fNFDataWrappedMonoid $fNFDataLast $fNFDataFirst $fNFDataArg $fNFDataMax $fNFDataMin$fNFDataNonEmpty$fNFDataExitCode $fNFDataCBool$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$fNFDataFunPtr $fNFDataPtr$fNFDataFingerprint $fNFDataMVar $fNFDataSTRef $fNFDataIORef $fNFDataTyCon$fNFDataSomeTypeRep$fNFDataUnique$fNFDataThreadId$fNFDataStableName$fNFDataProduct $fNFDataSum $fNFDataAll $fNFDataAny $fNFDataLast0$fNFDataFirst0 $fNFDataDual $fNFDataDown $fNFDataArray $fNFDataConst$fNFDataZipList $fNFData[]$fNFDataVersion$fNFDataEither $fNFDataMaybe$fNFDataComplex $fNFDataRatio $fNFData(->) $fNFDataFixed$fNFDataNatural $fNFDataVoid$fNFDataIdentity $fNFData:~~: $fNFData:~: $fNFDataProxy$fNFDataMaskingState$fNFDataWord64$fNFDataWord32$fNFDataWord16 $fNFDataWord8 $fNFDataInt64 $fNFDataInt32 $fNFDataInt16 $fNFDataInt8 $fNFData()$fNFDataOrdering $fNFDataBool $fNFDataChar$fNFDataDouble $fNFDataFloat$fNFDataInteger $fNFDataWord $fNFDataInt$fGNFDataarityK1$fNFData1Option$fNFData1WrappedMonoid $fNFData1Last$fNFData1First $fNFData1Max $fNFData1Min$fNFData1NonEmpty$fNFData1FunPtr $fNFData1Ptr $fNFData1MVar$fNFData1STRef$fNFData1IORef$fNFData1StableName$fNFData1Product $fNFData1Sum$fNFData1Last0$fNFData1First0 $fNFData1Dual $fNFData1Down$fNFData1Array$fNFData1Const$fNFData1ZipList $fNFData1[]$fNFData1Maybe$fNFDataProduct0$fNFData1Product0 $fNFDataSum0 $fNFData1Sum0$fNFDataCompose$fNFData1Compose$fNFData1Ratio$fNFData1Fixed$fNFData1Identity $fNFData1:~~: $fNFData1:~:$fNFData1Proxy$fGNFDataOne:.:$fGNFDataOneRec1$fNFData2(,,,,,,,,)$fNFData1(,,,,,,,,)$fNFData2(,,,,,,,)$fNFData1(,,,,,,,)$fNFData2(,,,,,,)$fNFData1(,,,,,,)$fNFData2(,,,,,)$fNFData1(,,,,,)$fNFData2(,,,,)$fNFData1(,,,,)$fNFData2(,,,)$fNFData1(,,,) $fNFData2(,,) $fNFData1(,,) $fNFData2(,) $fNFData1(,) $fNFData2Arg $fNFData1Arg$fNFData2STRef$fNFData2Array$fNFData2Const$fNFData2Either$fNFData1Either $fNFData2:~~: $fNFData2:~:base GHC.GenericsGenericGeneric1ghc-primGHC.PrimseqGNFDataGHC.Base$! GHC.TypesIO Data.Functor<$> Data.Voidabsurd