h"'"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~'(c) The University of Glasgow 2001-2009 BSD-style (see the file LICENSE)libraries@haskell.orgstableportableSafe'(.9>?"deepseq2A class of bifunctors that can be fully evaluated.deepseq 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.deepseq 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.deepseq should reduce its argument to normal form (that is, fully evaluate all sub-components), and then return '()'.  derivingStarting 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 ColourStarting 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 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.deepseqdeepseqdeepseqdeepseq deepseq!deepseq"deepseq#deepseq$deepseq%deepseq&deepseq'deepseq(deepseq)deepseq*deepseq+deepseq,deepseq-deepseq.deepseq/deepseq0deepseq1deepseq2deepseq3deepseq4deepseq5deepseq6deepseq7deepseq8deepseq9deepseq:deepseq;deepseq<deepseq=deepseq>deepseq?deepseq@deepseqAdeepseqBdeepseqCdeepseqDdeepseqEdeepseqFdeepseqGdeepseqNOTE<: Only strict in the reference and not the referenced value.HdeepseqNOTE<: Only strict in the reference and not the referenced value.IdeepseqNOTE<: Only strict in the reference and not the referenced value.JdeepseqNOTE : Prior to deepseq-1.4.4.0$ this instance was only defined for  base-4.8.0.0 and later.KdeepseqNOTE : Prior to deepseq-1.4.4.0$ this instance was only defined for  base-4.8.0.0 and later.LdeepseqMdeepseqNdeepseqOdeepseqPdeepseqQdeepseqRdeepseqSdeepseqTdeepseqUdeepseqVdeepseqXdeepseqYdeepseq[deepseq`deepseq6This instance is for convenience and consistency with <. This assumes that WHNF is equivalent to NF for functions.adeepseqbdeepseqcdeepseq Defined as  = .ddeepseqedeepseqfdeepseqgdeepseqhdeepseq{deepseq|deepseq}deepseq~deepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseq Available on  base >=4.9deepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseqdeepseq     0 4Safe"      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~deepseq-1.4.4.0Control.DeepSeqControl.ExceptionevaluateControl.DeepSeq.BackDoorNFData2liftRnf2NFData1liftRnfNFDatarnfdeepseq$!!force<$!!>rwhnfrnf1rnf2$fGNFDataOnePar1$fGNFDataarity:+:$fGNFDataarity:*:$fGNFDataarityURec$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