A class of types that can be fully evaluated.
Methods
rnf :: a -> ()rnf should reduce its argument to normal form (that is, fully evaluate all sub-components), and then return
().Generic NFData deriving
Starting with GHC 7.2, you can automatically derive instances for types possessing a Generic instance.
Note: Generic1 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
DeriveAnyClassextension:{-# 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
deepseqversionsPrior to version 1.4.0.0, the default implementation of the rnf method was defined as
rnf a = seq a ()However, starting with
deepseq-1.4.0.0, the default implementation is based onDefaultSignaturesallowing for more accurate auto-derived NFData instances. If you need the previously used exact default rnf method implementation semantics, useinstance NFData Colour where rnf x = seq x ()or alternatively
instance NFData Colour where rnf = rwhnfor
{-# LANGUAGE BangPatterns #-} instance NFData Colour where rnf !_ = ()
Instances109NFData, …
NFData ByteArrayDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData IntegerDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData NaturalDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData VoidDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData ThreadIdDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData AllDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData AnyDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData TypeRepDefined in deepseq-1.5.0.0 · Control.DeepSeqNOTE: Prior to
deepseq-1.4.4.0this instance was only defined forbase-4.8.0.0and later.NFData UniqueDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData VersionDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData FingerprintDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CBoolDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CCharDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CClockDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CDoubleDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CFileDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CFloatDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CFposDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CIntDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CIntMaxDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CIntPtrDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CJmpBufDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CLLongDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CLongDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CPtrdiffDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CSCharDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CSUSecondsDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CShortDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CSigAtomicDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CSizeDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CTimeDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUCharDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUIntDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUIntMaxDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUIntPtrDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CULLongDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CULongDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUSecondsDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CUShortDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CWcharDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData MaskingStateDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData ExitCodeDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData Int16Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Int32Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Int64Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Int8Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData CallStackDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData SrcLocDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData Word16Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Word32Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Word64Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData Word8Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData BoolDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData CharDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData DoubleDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData FloatDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData IntDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData ModuleDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData OrderingDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData TyConDefined in deepseq-1.5.0.0 · Control.DeepSeqNOTE: Prior to
deepseq-1.4.4.0this instance was only defined forbase-4.8.0.0and later.NFData WordDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData ()Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (MutableByteArray s)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (IORef a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNOTE: Only strict in the reference and not the referenced value.
NFData (MVar a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNOTE: Only strict in the reference and not the referenced value.
NFData (FunPtr a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (Ptr a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (StableName a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Complex a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (First a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Last a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Max a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Min a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (NonEmpty a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Identity a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (First a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Last a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Down a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Dual a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Product a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Sum a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (ZipList a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Maybe a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Ratio a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData [a]Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData m => NFData (WrappedMonoid m)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (Fixed a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (Proxy a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (TypeRep a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (STRef s a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNOTE: Only strict in the reference and not the referenced value.
NFData (a -> b)Defined in deepseq-1.5.0.0 · Control.DeepSeqThis instance is for convenience and consistency with seq. This assumes that WHNF is equivalent to NF for functions.
(NFData a, NFData b) => NFData (Arg a b)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a, NFData b) => NFData (Array a b)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a, NFData b) => NFData (Either a b)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a, NFData b) => NFData (a, b)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (a :~: b)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData a => NFData (Const a b)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a1, NFData a2, NFData a3) => NFData (a1, a2, a3)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (a :~~: b)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData (f a), NFData (g a)) => NFData (Product f g a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNote: in
deepseq-1.5.0.0this instance's superclasses were changed.(NFData (f a), NFData (g a)) => NFData (Sum f g a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNote: in
deepseq-1.5.0.0this instance's superclasses were changed.(NFData a1, NFData a2, NFData a3, NFData a4) => NFData (a1, a2, a3, a4)Defined in deepseq-1.5.0.0 · Control.DeepSeqNFData (f (g a)) => NFData (Compose f g a)Defined in deepseq-1.5.0.0 · Control.DeepSeqNote: in
deepseq-1.5.0.0this instance's superclasses were changed.(NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => NFData (a1, a2, a3, a4, a5)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => NFData (a1, a2, a3, a4, a5, a6)Defined in deepseq-1.5.0.0 · Control.DeepSeq(NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => NFData (a1, a2, a3, a4, a5, a6, a7)Defined in deepseq-1.5.0.0 · Control.DeepSeq(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)Defined in deepseq-1.5.0.0 · Control.DeepSeq(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)Defined in deepseq-1.5.0.0 · Control.DeepSeq