-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Deep evaluation of data structures
--   
--   This package provides methods for fully evaluating data structures
--   ("deep evaluation"). Deep evaluation is often used for adding
--   strictness to a program, e.g. in order to force pending exceptions,
--   remove space leaks, or force lazy I/O to happen. It is also useful in
--   parallel programs, to ensure pending work does not migrate to the
--   wrong thread.
--   
--   The primary use of this package is via the deepseq function, a
--   "deep" version of seq. It is implemented on top of an
--   NFData typeclass ("Normal Form Data", data structures with no
--   unevaluated components) which defines strategies for fully evaluating
--   different data types. See module documentation in
--   Control.DeepSeq for more details.
@package deepseq
@version 1.5.0.0

-- | This module provides overloaded functions, such as deepseq and
--   rnf, for fully evaluating data structures (that is, evaluating
--   to "Normal Form").
--   
--   A typical use is to prevent resource leaks in lazy IO programs, by
--   forcing all characters from a file to be read. For example:
--   
--   
--   import System.IO
--   import Control.DeepSeq
--   import Control.Exception (evaluate)
--   
--   readFile' :: FilePath -> IO String
--   readFile' fn = do
--       h <- openFile fn ReadMode
--       s <- hGetContents h
--       evaluate (rnf s)
--       hClose h
--       return s
--   
--   
--   Note: The example above should rather be written in terms of
--   bracket to ensure releasing file-descriptors in a timely matter
--   (see the description of force for an example).
--   
--   deepseq differs from seq as it traverses data structures
--   deeply, for example, seq will evaluate only to the first
--   constructor in the list:
--   
--   
--   > [1,2,undefined] `seq` 3
--   3
--   
--   
--   While deepseq will force evaluation of all the list elements:
--   
--   
--   > [1,2,undefined] `deepseq` 3
--   *** Exception: Prelude.undefined
--   
--   
--   Another common use is to ensure any exceptions hidden within lazy
--   fields of a data structure do not leak outside the scope of the
--   exception handler, or to force evaluation of a data structure in one
--   thread, before passing to another thread (preventing work moving to
--   the wrong threads).
module Control.DeepSeq

-- | A class of types that can be fully evaluated.
class NFData 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 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 rnf
--   method was defined as
--   
--   
--   rnf a = seq a ()
--   
--   
--   However, starting with deepseq-1.4.0.0, the default
--   implementation is based on DefaultSignatures allowing for
--   more accurate auto-derived NFData instances. If you need the
--   previously used exact default rnf method implementation
--   semantics, use
--   
--   
--   instance NFData Colour where rnf x = seq x ()
--   
--   
--   or alternatively
--   
--   
--   instance NFData Colour where rnf = rwhnf
--   
--   
--   or
--   
--   
--   {-# LANGUAGE BangPatterns #-}
--   instance NFData Colour where rnf !_ = ()
--   
rnf :: NFData a => a -> ()
($dmrnf) :: (NFData a, Generic a, GNFData Zero (Rep a)) => a -> ()

-- | deepseq: fully evaluates the first argument, before returning
--   the second.
--   
--   The name deepseq is used to illustrate the relationship to
--   seq: where seq is shallow in the sense that it only
--   evaluates the top level of its argument, deepseq traverses the
--   entire data structure evaluating it completely.
--   
--   deepseq 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.
deepseq :: NFData a => a -> b -> b
infixr 0 `deepseq`

-- | a variant of deepseq that is useful in some circumstances:
--   
--   
--   force x = x `deepseq` x
--   
--   
--   force x fully evaluates x, and then returns it. Note
--   that force x only performs evaluation when the value of
--   force x itself is demanded, so essentially it turns shallow
--   evaluation into deep evaluation.
--   
--   force 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 force with
--   evaluate in order to force deep evaluation relative to other
--   IO operations:
--   
--   
--   import Control.Exception (evaluate)
--   import Control.DeepSeq
--   
--   main = do
--     result <- evaluate $ force $ pureComputation
--     {- 'result' will be fully evaluated at this point -}
--     return ()
--   
--   
--   Finally, 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
--   
force :: NFData a => a -> a

-- | the deep analogue of $!. In the expression f $!! x,
--   x is fully evaluated before the function f is
--   applied to it.
($!!) :: NFData a => (a -> b) -> a -> b
infixr 0 $!!

-- | Deeply strict version of <$>.
(<$!!>) :: (Monad m, NFData b) => (a -> b) -> m a -> m b
infixl 4 <$!!>

-- | Reduce to weak head normal form
--   
--   Equivalent to \x -> seq x ().
--   
--   Useful for defining NFData for types for which NF=WHNF holds.
--   
--   
--   data T = C1 | C2 | C3
--   instance NFData T where rnf = rwhnf
--   
rwhnf :: a -> ()

-- | A class of functors that can be fully evaluated.
--   
--   In `deepseq-1.5.0.0` this class was updated to include superclasses.
class forall a. NFData a => NFData f a => NFData1 (f :: Type -> Type)

-- | liftRnf 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 rnf for the generic deriving.
liftRnf :: NFData1 f => (a -> ()) -> f a -> ()
($dmliftRnf) :: (NFData1 f, Generic1 f, GNFData One (Rep1 f)) => (a -> ()) -> f a -> ()

-- | Lift the standard rnf function through the type constructor.
rnf1 :: (NFData1 f, NFData a) => f a -> ()

-- | A class of bifunctors that can be fully evaluated.
--   
--   In `deepseq-1.5.0.0` this class was updated to include superclasses.
class forall a. NFData a => NFData1 p a => NFData2 (p :: Type -> Type -> Type)

-- | liftRnf2 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 liftRnf, there is currently
--   no support for generically deriving liftRnf2.
liftRnf2 :: NFData2 p => (a -> ()) -> (b -> ()) -> p a b -> ()

-- | Lift the standard rnf function through the type constructor.
rnf2 :: (NFData2 p, NFData a, NFData b) => p a b -> ()
instance (Control.DeepSeq.NFData1 f, Control.DeepSeq.GNFData Control.DeepSeq.One g) => Control.DeepSeq.GNFData Control.DeepSeq.One (f GHC.Internal.Generics.:.: g)
instance Control.DeepSeq.GNFData Control.DeepSeq.One GHC.Internal.Generics.Par1
instance Control.DeepSeq.NFData1 f => Control.DeepSeq.GNFData Control.DeepSeq.One (GHC.Internal.Generics.Rec1 f)
instance (Control.DeepSeq.GNFData arity a, Control.DeepSeq.GNFData arity b) => Control.DeepSeq.GNFData arity (a GHC.Internal.Generics.:*: b)
instance (Control.DeepSeq.GNFData arity a, Control.DeepSeq.GNFData arity b) => Control.DeepSeq.GNFData arity (a GHC.Internal.Generics.:+: b)
instance Control.DeepSeq.NFData a => Control.DeepSeq.GNFData arity (GHC.Internal.Generics.K1 i a)
instance Control.DeepSeq.GNFData arity a => Control.DeepSeq.GNFData arity (GHC.Internal.Generics.M1 i c a)
instance Control.DeepSeq.GNFData arity GHC.Internal.Generics.U1
instance Control.DeepSeq.GNFData arity (GHC.Internal.Generics.URec a)
instance Control.DeepSeq.GNFData arity GHC.Internal.Generics.V1
instance Control.DeepSeq.NFData1 ((GHC.Internal.Data.Type.Equality.:~:) a)
instance forall k1 (a :: k1). Control.DeepSeq.NFData1 ((GHC.Internal.Data.Type.Equality.:~~:) a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 (Data.Semigroup.Arg a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 (GHC.Internal.Arr.Array a)
instance (Control.DeepSeq.NFData1 f, Control.DeepSeq.NFData1 g) => Control.DeepSeq.NFData1 (Data.Functor.Compose.Compose f g)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 (GHC.Internal.Data.Functor.Const.Const a)
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Ord.Down
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Semigroup.Internal.Dual
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 (GHC.Internal.Data.Either.Either a)
instance Control.DeepSeq.NFData1 Data.Semigroup.First
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Monoid.First
instance Control.DeepSeq.NFData1 Data.Fixed.Fixed
instance Control.DeepSeq.NFData1 GHC.Internal.Ptr.FunPtr
instance Control.DeepSeq.NFData1 GHC.Internal.IORef.IORef
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Functor.Identity.Identity
instance Control.DeepSeq.NFData1 Data.Semigroup.Last
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Monoid.Last
instance Control.DeepSeq.NFData1 []
instance Control.DeepSeq.NFData1 GHC.Internal.MVar.MVar
instance Control.DeepSeq.NFData1 Data.Semigroup.Max
instance Control.DeepSeq.NFData1 GHC.Internal.Maybe.Maybe
instance Control.DeepSeq.NFData1 Data.Semigroup.Min
instance Control.DeepSeq.NFData1 GHC.Internal.Base.NonEmpty
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Semigroup.Internal.Product
instance (Control.DeepSeq.NFData1 f, Control.DeepSeq.NFData1 g) => Control.DeepSeq.NFData1 (Data.Functor.Product.Product f g)
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Proxy.Proxy
instance Control.DeepSeq.NFData1 GHC.Internal.Ptr.Ptr
instance Control.DeepSeq.NFData1 GHC.Internal.Real.Ratio
instance Control.DeepSeq.NFData1 (GHC.Internal.STRef.STRef s)
instance Control.DeepSeq.NFData1 GHC.Tuple.Solo
instance Control.DeepSeq.NFData1 GHC.Internal.StableName.StableName
instance Control.DeepSeq.NFData1 GHC.Internal.Data.Semigroup.Internal.Sum
instance (Control.DeepSeq.NFData1 f, Control.DeepSeq.NFData1 g) => Control.DeepSeq.NFData1 (Data.Functor.Sum.Sum f g)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData1 ((,) a)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2) => Control.DeepSeq.NFData1 ((,,) a1 a2)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3) => Control.DeepSeq.NFData1 ((,,,) a1 a2 a3)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4) => Control.DeepSeq.NFData1 ((,,,,) a1 a2 a3 a4)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5) => Control.DeepSeq.NFData1 ((,,,,,) a1 a2 a3 a4 a5)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6) => Control.DeepSeq.NFData1 ((,,,,,,) a1 a2 a3 a4 a5 a6)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7) => Control.DeepSeq.NFData1 ((,,,,,,,) a1 a2 a3 a4 a5 a6 a7)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7, Control.DeepSeq.NFData a8) => Control.DeepSeq.NFData1 ((,,,,,,,,) a1 a2 a3 a4 a5 a6 a7 a8)
instance Control.DeepSeq.NFData1 Data.Semigroup.WrappedMonoid
instance Control.DeepSeq.NFData1 GHC.Internal.Functor.ZipList.ZipList
instance Control.DeepSeq.NFData2 (GHC.Internal.Data.Type.Equality.:~:)
instance Control.DeepSeq.NFData2 (GHC.Internal.Data.Type.Equality.:~~:)
instance Control.DeepSeq.NFData2 Data.Semigroup.Arg
instance Control.DeepSeq.NFData2 GHC.Internal.Arr.Array
instance Control.DeepSeq.NFData2 GHC.Internal.Data.Functor.Const.Const
instance Control.DeepSeq.NFData2 GHC.Internal.Data.Either.Either
instance Control.DeepSeq.NFData2 GHC.Internal.STRef.STRef
instance Control.DeepSeq.NFData2 (,)
instance Control.DeepSeq.NFData a1 => Control.DeepSeq.NFData2 ((,,) a1)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2) => Control.DeepSeq.NFData2 ((,,,) a1 a2)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3) => Control.DeepSeq.NFData2 ((,,,,) a1 a2 a3)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4) => Control.DeepSeq.NFData2 ((,,,,,) a1 a2 a3 a4)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5) => Control.DeepSeq.NFData2 ((,,,,,,) a1 a2 a3 a4 a5)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6) => Control.DeepSeq.NFData2 ((,,,,,,,) a1 a2 a3 a4 a5 a6)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7) => Control.DeepSeq.NFData2 ((,,,,,,,,) a1 a2 a3 a4 a5 a6 a7)
instance forall k (a :: k) (b :: k). Control.DeepSeq.NFData (a GHC.Internal.Data.Type.Equality.:~: b)
instance forall k1 k2 (a :: k1) (b :: k2). Control.DeepSeq.NFData (a GHC.Internal.Data.Type.Equality.:~~: b)
instance Control.DeepSeq.NFData GHC.Internal.Data.Semigroup.Internal.All
instance Control.DeepSeq.NFData GHC.Internal.Data.Semigroup.Internal.Any
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (Data.Semigroup.Arg a b)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (GHC.Internal.Arr.Array a b)
instance Control.DeepSeq.NFData GHC.Types.Bool
instance Control.DeepSeq.NFData Data.Array.Byte.ByteArray
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CBool
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CChar
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CClock
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CDouble
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CFile
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CFloat
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CFpos
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CInt
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CIntMax
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CIntPtr
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CJmpBuf
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CLLong
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CLong
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CPtrdiff
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CSChar
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CSUSeconds
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CShort
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CSigAtomic
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CSize
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CTime
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUChar
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUInt
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUIntMax
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUIntPtr
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CULLong
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CULong
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUSeconds
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CUShort
instance Control.DeepSeq.NFData GHC.Internal.Foreign.C.Types.CWchar
instance Control.DeepSeq.NFData GHC.Internal.Stack.Types.CallStack
instance Control.DeepSeq.NFData GHC.Types.Char
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Complex.Complex a)
instance forall k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1). Control.DeepSeq.NFData (f (g a)) => Control.DeepSeq.NFData (Data.Functor.Compose.Compose f g a)
instance forall k a (b :: k). Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Functor.Const.Const a b)
instance Control.DeepSeq.NFData GHC.Types.Double
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Ord.Down a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Semigroup.Internal.Dual a)
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (GHC.Internal.Data.Either.Either a b)
instance Control.DeepSeq.NFData GHC.Internal.IO.Exception.ExitCode
instance Control.DeepSeq.NFData (a -> b)
instance Control.DeepSeq.NFData GHC.Internal.Fingerprint.Type.Fingerprint
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Semigroup.First a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Monoid.First a)
instance forall k (a :: k). Control.DeepSeq.NFData (Data.Fixed.Fixed a)
instance Control.DeepSeq.NFData GHC.Types.Float
instance Control.DeepSeq.NFData (GHC.Internal.Ptr.FunPtr a)
instance Control.DeepSeq.NFData (GHC.Internal.IORef.IORef a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Functor.Identity.Identity a)
instance Control.DeepSeq.NFData GHC.Types.Int
instance Control.DeepSeq.NFData GHC.Internal.Int.Int16
instance Control.DeepSeq.NFData GHC.Internal.Int.Int32
instance Control.DeepSeq.NFData GHC.Internal.Int.Int64
instance Control.DeepSeq.NFData GHC.Internal.Int.Int8
instance Control.DeepSeq.NFData GHC.Num.Integer.Integer
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Semigroup.Last a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Monoid.Last a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData [a]
instance Control.DeepSeq.NFData (GHC.Internal.MVar.MVar a)
instance Control.DeepSeq.NFData GHC.Internal.IO.MaskingState
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Semigroup.Max a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Maybe.Maybe a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Data.Semigroup.Min a)
instance Control.DeepSeq.NFData GHC.Types.Module
instance Control.DeepSeq.NFData (Data.Array.Byte.MutableByteArray s)
instance Control.DeepSeq.NFData GHC.Num.Natural.Natural
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Base.NonEmpty a)
instance Control.DeepSeq.NFData GHC.Types.Ordering
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Semigroup.Internal.Product a)
instance forall k (f :: k -> *) (a :: k) (g :: k -> *). (Control.DeepSeq.NFData (f a), Control.DeepSeq.NFData (g a)) => Control.DeepSeq.NFData (Data.Functor.Product.Product f g a)
instance forall k (a :: k). Control.DeepSeq.NFData (GHC.Internal.Data.Proxy.Proxy a)
instance Control.DeepSeq.NFData (GHC.Internal.Ptr.Ptr a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Real.Ratio a)
instance Control.DeepSeq.NFData (GHC.Internal.STRef.STRef s a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Tuple.Solo a)
instance Control.DeepSeq.NFData GHC.Internal.Data.Typeable.TypeRep
instance Control.DeepSeq.NFData GHC.Internal.Stack.Types.SrcLoc
instance Control.DeepSeq.NFData (GHC.Internal.StableName.StableName a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Data.Semigroup.Internal.Sum a)
instance forall k (f :: k -> *) (a :: k) (g :: k -> *). (Control.DeepSeq.NFData (f a), Control.DeepSeq.NFData (g a)) => Control.DeepSeq.NFData (Data.Functor.Sum.Sum f g a)
instance Control.DeepSeq.NFData GHC.Internal.Conc.Sync.ThreadId
instance (Control.DeepSeq.NFData a, Control.DeepSeq.NFData b) => Control.DeepSeq.NFData (a, b)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3) => Control.DeepSeq.NFData (a1, a2, a3)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4) => Control.DeepSeq.NFData (a1, a2, a3, a4)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5) => Control.DeepSeq.NFData (a1, a2, a3, a4, a5)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6) => Control.DeepSeq.NFData (a1, a2, a3, a4, a5, a6)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7) => Control.DeepSeq.NFData (a1, a2, a3, a4, a5, a6, a7)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7, Control.DeepSeq.NFData a8) => Control.DeepSeq.NFData (a1, a2, a3, a4, a5, a6, a7, a8)
instance (Control.DeepSeq.NFData a1, Control.DeepSeq.NFData a2, Control.DeepSeq.NFData a3, Control.DeepSeq.NFData a4, Control.DeepSeq.NFData a5, Control.DeepSeq.NFData a6, Control.DeepSeq.NFData a7, Control.DeepSeq.NFData a8, Control.DeepSeq.NFData a9) => Control.DeepSeq.NFData (a1, a2, a3, a4, a5, a6, a7, a8, a9)
instance Control.DeepSeq.NFData GHC.Types.TyCon
instance forall k (a :: k). Control.DeepSeq.NFData (GHC.Internal.Data.Typeable.Internal.TypeRep a)
instance Control.DeepSeq.NFData GHC.Internal.Data.Unique.Unique
instance Control.DeepSeq.NFData ()
instance Control.DeepSeq.NFData GHC.Internal.Data.Version.Version
instance Control.DeepSeq.NFData GHC.Internal.Base.Void
instance Control.DeepSeq.NFData GHC.Types.Word
instance Control.DeepSeq.NFData GHC.Internal.Word.Word16
instance Control.DeepSeq.NFData GHC.Internal.Word.Word32
instance Control.DeepSeq.NFData GHC.Internal.Word.Word64
instance Control.DeepSeq.NFData GHC.Internal.Word.Word8
instance Control.DeepSeq.NFData m => Control.DeepSeq.NFData (Data.Semigroup.WrappedMonoid m)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (GHC.Internal.Functor.ZipList.ZipList a)
