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


-- | Deep evaluation of data structures
°5u
°5uThis package provides methods for fully evaluating data structures
°5u("deep evaluation"). Deep evaluation is often used for adding
°5ustrictness to a program, e.g. in order to force pending exceptions,
°5uremove space leaks, or force lazy I/O to happen. It is also useful in
°5uparallel programs, to ensure pending work does not migrate to the
°5uwrong thread.
°5u
°5uThe primary use of this package is via the <a>deepseq</a> function, a
°5u"deep" version of <a>seq</a>. It is implemented on top of an
°5u<a>NFData</a> typeclass ("Normal Form Data", data structures with no
°5uunevaluated components) which defines strategies for fully evaluating
°5udifferent data types.
@package deepseq
@version 1.4.3.0


-- | This module provides overloaded functions, such as <a>deepseq</a> and
°5u<a>rnf</a>, for fully evaluating data structures (that is, evaluating
°5uto "Normal Form").
°5u
°5uA typical use is to prevent resource leaks in lazy IO programs, by
°5uforcing all characters from a file to be read. For example:
°5u
°5u<pre>
°5uimport System.IO
°5uimport Control.DeepSeq
°5uimport Control.Exception (evaluate)
°5u
°5ureadFile' :: FilePath -&gt; IO String
°5ureadFile' fn = do
°5u    h &lt;- openFile fn ReadMode
°5u    s &lt;- hGetContents h
°5u    evaluate (rnf s)
°5u    hClose h
°5u    return s
°5u</pre>
°5u
°5u<b>Note</b>: The example above should rather be written in terms of
°5u<a>bracket</a> to ensure releasing file-descriptors in a timely matter
°5u(see the description of <a>force</a> for an example).
°5u
°5u<a>deepseq</a> differs from <a>seq</a> as it traverses data structures
°5udeeply, for example, <a>seq</a> will evaluate only to the first
°5uconstructor in the list:
°5u
°5u<pre>
°5u&gt; [1,2,undefined] `seq` 3
°5u3
°5u</pre>
°5u
°5uWhile <a>deepseq</a> will force evaluation of all the list elements:
°5u
°5u<pre>
°5u&gt; [1,2,undefined] `deepseq` 3
°5u*** Exception: Prelude.undefined
°5u</pre>
°5u
°5uAnother common use is to ensure any exceptions hidden within lazy
°5ufields of a data structure do not leak outside the scope of the
°5uexception handler, or to force evaluation of a data structure in one
°5uthread, before passing to another thread (preventing work moving to
°5uthe wrong threads).
module Control.DeepSeq

-- | A class of types that can be fully evaluated.
class NFData a

-- | <a>rnf</a> should reduce its argument to normal form (that is, fully
°5uevaluate all sub-components), and then return '()'.
°5u
°5u<h3><a>Generic</a> <a>NFData</a> deriving</h3>
°5u
°5uStarting with GHC 7.2, you can automatically derive instances for
°5utypes possessing a <a>Generic</a> instance.
°5u
°5uNote: <a>Generic1</a> can be auto-derived starting with GHC 7.4
°5u
°5u<pre>
°5u{-# LANGUAGE DeriveGeneric #-}
°5u
°5uimport GHC.Generics (Generic, Generic1)
°5uimport Control.DeepSeq
°5u
°5udata Foo a = Foo a String
°5u             deriving (Eq, Generic, Generic1)
°5u
°5uinstance NFData a =&gt; NFData (Foo a)
°5uinstance NFData1 Foo
°5u
°5udata Colour = Red | Green | Blue
°5u              deriving Generic
°5u
°5uinstance NFData Colour
°5u</pre>
°5u
°5uStarting with GHC 7.10, the example above can be written more
°5uconcisely by enabling the new <tt>DeriveAnyClass</tt> extension:
°5u
°5u<pre>
°5u{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
°5u
°5uimport GHC.Generics (Generic)
°5uimport Control.DeepSeq
°5u
°5udata Foo a = Foo a String
°5u             deriving (Eq, Generic, Generic1, NFData, NFData1)
°5u
°5udata Colour = Red | Green | Blue
°5u              deriving (Generic, NFData)
°5u</pre>
°5u
°5u<h3>Compatibility with previous <tt>deepseq</tt> versions</h3>
°5u
°5uPrior to version 1.4.0.0, the default implementation of the <a>rnf</a>
°5umethod was defined as
°5u
°5u<pre>
°5u<a>rnf</a> a = <a>seq</a> a ()
°5u</pre>
°5u
°5uHowever, starting with <tt>deepseq-1.4.0.0</tt>, the default
°5uimplementation is based on <tt>DefaultSignatures</tt> allowing for
°5umore accurate auto-derived <a>NFData</a> instances. If you need the
°5upreviously used exact default <a>rnf</a> method implementation
°5usemantics, use
°5u
°5u<pre>
°5uinstance NFData Colour where rnf x = seq x ()
°5u</pre>
°5u
°5uor alternatively
°5u
°5u<pre>
°5uinstance NFData Colour where rnf = rwhnf
°5u</pre>
°5u
°5uor
°5u
°5u<pre>
°5u{-# LANGUAGE BangPatterns #-}
°5uinstance NFData Colour where rnf !_ = ()
°5u</pre>
rnf :: NFData a => a -> ()

-- | <a>rnf</a> should reduce its argument to normal form (that is, fully
°5uevaluate all sub-components), and then return '()'.
°5u
°5u<h3><a>Generic</a> <a>NFData</a> deriving</h3>
°5u
°5uStarting with GHC 7.2, you can automatically derive instances for
°5utypes possessing a <a>Generic</a> instance.
°5u
°5uNote: <a>Generic1</a> can be auto-derived starting with GHC 7.4
°5u
°5u<pre>
°5u{-# LANGUAGE DeriveGeneric #-}
°5u
°5uimport GHC.Generics (Generic, Generic1)
°5uimport Control.DeepSeq
°5u
°5udata Foo a = Foo a String
°5u             deriving (Eq, Generic, Generic1)
°5u
°5uinstance NFData a =&gt; NFData (Foo a)
°5uinstance NFData1 Foo
°5u
°5udata Colour = Red | Green | Blue
°5u              deriving Generic
°5u
°5uinstance NFData Colour
°5u</pre>
°5u
°5uStarting with GHC 7.10, the example above can be written more
°5uconcisely by enabling the new <tt>DeriveAnyClass</tt> extension:
°5u
°5u<pre>
°5u{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
°5u
°5uimport GHC.Generics (Generic)
°5uimport Control.DeepSeq
°5u
°5udata Foo a = Foo a String
°5u             deriving (Eq, Generic, Generic1, NFData, NFData1)
°5u
°5udata Colour = Red | Green | Blue
°5u              deriving (Generic, NFData)
°5u</pre>
°5u
°5u<h3>Compatibility with previous <tt>deepseq</tt> versions</h3>
°5u
°5uPrior to version 1.4.0.0, the default implementation of the <a>rnf</a>
°5umethod was defined as
°5u
°5u<pre>
°5u<a>rnf</a> a = <a>seq</a> a ()
°5u</pre>
°5u
°5uHowever, starting with <tt>deepseq-1.4.0.0</tt>, the default
°5uimplementation is based on <tt>DefaultSignatures</tt> allowing for
°5umore accurate auto-derived <a>NFData</a> instances. If you need the
°5upreviously used exact default <a>rnf</a> method implementation
°5usemantics, use
°5u
°5u<pre>
°5uinstance NFData Colour where rnf x = seq x ()
°5u</pre>
°5u
°5uor alternatively
°5u
°5u<pre>
°5uinstance NFData Colour where rnf = rwhnf
°5u</pre>
°5u
°5uor
°5u
°5u<pre>
°5u{-# LANGUAGE BangPatterns #-}
°5uinstance NFData Colour where rnf !_ = ()
°5u</pre>
rnf :: (NFData a, Generic a, GNFData Zero (Rep a)) => a -> ()

-- | <a>deepseq</a>: fully evaluates the first argument, before returning
°5uthe second.
°5u
°5uThe name <a>deepseq</a> is used to illustrate the relationship to
°5u<a>seq</a>: where <a>seq</a> is shallow in the sense that it only
°5uevaluates the top level of its argument, <a>deepseq</a> traverses the
°5uentire data structure evaluating it completely.
°5u
°5u<a>deepseq</a> can be useful for forcing pending exceptions,
°5ueradicating space leaks, or forcing lazy I/O to happen. It is also
°5uuseful in conjunction with parallel Strategies (see the
°5u<tt>parallel</tt> package).
°5u
°5uThere is no guarantee about the ordering of evaluation. The
°5uimplementation may evaluate the components of the structure in any
°5uorder or in parallel. To impose an actual order on evaluation, use
°5u<tt>pseq</tt> from <a>Control.Parallel</a> in the <tt>parallel</tt>
°5upackage.
deepseq :: NFData a => a -> b -> b

-- | a variant of <a>deepseq</a> that is useful in some circumstances:
°5u
°5u<pre>
°5uforce x = x `deepseq` x
°5u</pre>
°5u
°5u<tt>force x</tt> fully evaluates <tt>x</tt>, and then returns it. Note
°5uthat <tt>force x</tt> only performs evaluation when the value of
°5u<tt>force x</tt> itself is demanded, so essentially it turns shallow
°5uevaluation into deep evaluation.
°5u
°5u<a>force</a> can be conveniently used in combination with
°5u<tt>ViewPatterns</tt>:
°5u
°5u<pre>
°5u{-# LANGUAGE BangPatterns, ViewPatterns #-}
°5uimport Control.DeepSeq
°5u
°5usomeFun :: ComplexData -&gt; SomeResult
°5usomeFun (force -&gt; !arg) = {- 'arg' will be fully evaluated -}
°5u</pre>
°5u
°5uAnother useful application is to combine <a>force</a> with
°5u<a>evaluate</a> in order to force deep evaluation relative to other
°5u<a>IO</a> operations:
°5u
°5u<pre>
°5uimport Control.Exception (evaluate)
°5uimport Control.DeepSeq
°5u
°5umain = do
°5u  result &lt;- evaluate $ force $ pureComputation
°5u  {- 'result' will be fully evaluated at this point -}
°5u  return ()
°5u</pre>
°5u
°5uFinally, here's an exception safe variant of the <tt>readFile'</tt>
°5uexample:
°5u
°5u<pre>
°5ureadFile' :: FilePath -&gt; IO String
°5ureadFile' fn = bracket (openFile fn ReadMode) hClose $ \h -&gt;
°5u                       evaluate . force =&lt;&lt; hGetContents h
°5u</pre>
force :: (NFData a) => a -> a

-- | the deep analogue of <a>$!</a>. In the expression <tt>f $!! x</tt>,
°5u<tt>x</tt> is fully evaluated before the function <tt>f</tt> is
°5uapplied to it.
($!!) :: (NFData a) => (a -> b) -> a -> b
infixr 0 $!!

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

-- | Reduce to weak head normal form
°5u
°5uEquivalent to <tt>\x -&gt; <a>seq</a> x ()</tt>.
°5u
°5uUseful for defining <a>NFData</a> for types for which NF=WHNF holds.
°5u
°5u<pre>
°5udata T = C1 | C2 | C3
°5uinstance NFData T where rnf = rwhnf
°5u</pre>
rwhnf :: a -> ()

-- | A class of functors that can be fully evaluated.
class NFData1 f

-- | <a>liftRnf</a> should reduce its argument to normal form (that is,
°5ufully evaluate all sub-components), given an argument to reduce
°5u<tt>a</tt> arguments, and then return '()'.
°5u
°5uSee <a>rnf</a> for the generic deriving.
liftRnf :: NFData1 f => (a -> ()) -> f a -> ()

-- | <a>liftRnf</a> should reduce its argument to normal form (that is,
°5ufully evaluate all sub-components), given an argument to reduce
°5u<tt>a</tt> arguments, and then return '()'.
°5u
°5uSee <a>rnf</a> for the generic deriving.
liftRnf :: (NFData1 f, Generic1 f, GNFData One (Rep1 f)) => (a -> ()) -> f a -> ()

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

-- | A class of bifunctors that can be fully evaluated.
class NFData2 p

-- | <a>liftRnf2</a> should reduce its argument to normal form (that is,
°5ufully evaluate all sub-components), given functions to reduce
°5u<tt>a</tt> and <tt>b</tt> arguments respectively, and then return
°5u'()'.
°5u
°5u<b>Note</b>: Unlike for the unary <a>liftRnf</a>, there is currently
°5uno support for generically deriving <a>liftRnf2</a>.
liftRnf2 :: NFData2 p => (a -> ()) -> (b -> ()) -> p a b -> ()

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