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 !_ = ()
Instances144NFData, …
NFData ByteArrayDefined in deepseq-1.5.0.0 · Control.DeepSeqNFData BufferDefined in bytestring-0.12.2.0 · Data.ByteString.Builder.InternalLike the
NFDatainstance forStrictByteString, this does not force theForeignPtrContentsfield of the underlyingForeignPtr.NFData BufferRangeDefined in bytestring-0.12.2.0 · Data.ByteString.Builder.InternalNFData ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Internal.TypeNFData ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Lazy.InternalNFData ShortByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Short.InternalNFData IntSetDefined in containers-0.7 · Data.IntSet.InternalNFData 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 EncodingExceptionDefined in os-string-2.0.7 · System.OsString.Encoding.InternalNFData OsCharDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData OsStringDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData PosixCharDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData PosixStringDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData WindowsCharDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData WindowsStringDefined in os-string-2.0.7 · System.OsString.Internal.TypesNFData TextDetailsDefined in pretty-1.1.3.6 · Text.PrettyPrint.Annotated.HughesPJNFData DocDefined in pretty-1.1.3.6 · Text.PrettyPrint.HughesPJNFData UnicodeExceptionDefined in text-2.1.3 · Data.Text.Encoding.ErrorNFData TextDefined in text-2.1.3 · Data.Text · orphanNFData TextDefined in text-2.1.3 · Data.Text.Lazy · orphanNFData ()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 (SCC a)Defined in containers-0.7 · Data.GraphNFData a => NFData (IntMap a)Defined in containers-0.7 · Data.IntMap.InternalNFData a => NFData (Digit a)Defined in containers-0.7 · Data.Sequence.InternalNFData a => NFData (Elem a)Defined in containers-0.7 · Data.Sequence.InternalNFData a => NFData (FingerTree a)Defined in containers-0.7 · Data.Sequence.InternalNFData a => NFData (Node a)Defined in containers-0.7 · Data.Sequence.InternalNFData a => NFData (Seq a)Defined in containers-0.7 · Data.Sequence.InternalNFData a => NFData (Set a)Defined in containers-0.7 · Data.Set.InternalNFData a => NFData (Tree a)Defined in containers-0.7 · Data.TreeNFData 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 (Hashed a)Defined in hashable-1.4.7.0 · Data.Hashable.ClassNFData a => NFData (AnnotDetails a)Defined in pretty-1.1.3.6 · Text.PrettyPrint.Annotated.HughesPJNFData a => NFData (Doc a)Defined in pretty-1.1.3.6 · Text.PrettyPrint.Annotated.HughesPJNFData a => NFData (Array a)Defined in unordered-containers-0.2.21 · Data.HashMap.Internal.ArrayNFData a => NFData (HashSet a)Defined in unordered-containers-0.2.21 · Data.HashSet.InternalNFData 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.DeepSeq(NFData k, NFData a) => NFData (Map k a)Defined in containers-0.7 · Data.Map.Internal(NFData k, NFData v) => NFData (HashMap k v)Defined in unordered-containers-0.2.21 · Data.HashMap.Internal(NFData k, NFData v) => NFData (Leaf k v)Defined in unordered-containers-0.2.21 · Data.HashMap.InternalNFData (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