-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Generic deep evaluation of data structures
--
-- This package provides a deepseq function analogous to
-- seq, except that it traverses the entire data structure,
-- evaluating it fully, and not just up to head normal form.
--
-- Using lists as an example:
--
--
-- > [1,2,undefined] `seq` 3
-- 3
--
--
-- Whereas with deepseq:
--
--
-- > [1,2,undefined] `deepseq` 3
-- *** Exception: Prelude.undefined
--
--
-- Unlike the deepseq package, this implementation is based on
-- the GHC.Generics framework as found in GHC >= 7.2, so that
-- it can generate instances automatically for any datatype that has a
-- Generic instance, without further code.
--
--
-- data MyType = MyType String Int (Maybe Double)
-- deriving Generic
-- instance DeepSeq MyType
--
--
-- Changes in version 2.0.0.0:
--
--
-- - Vastly improved performance. As a consequence of these changes,
-- the member function of the DeepSeq class is now rnf, instead of
-- deepseq.
-- - New instances for functions, Ratio and Complex types.
--
--
-- Changes in version 2.0.1.0:
--
--
-- - Fix the U1 and V1 instances.
--
--
-- Changes in version 2.0.1.1:
--
--
-- - No functional changes, updated to correct the URLs of the
-- repository and the issue tracker.
--
@package generic-deepseq
@version 2.0.1.1
-- | This module provides a deepseq function for fully evaluating
-- data structures (that is, evaluating to "Normal Form", and not just up
-- to "Head Normal Form" like seq does).
--
-- It uses the GHC.Generics framework so that you can generate
-- instances for your datatypes without having to provide an
-- implementation.
module Control.DeepSeq
class DeepSeq a where rnf = grnf . from
rnf :: DeepSeq a => a -> ()
-- | Evaluates its first argument to normal form, and then returns its
-- second argument as the result.
deepseq :: DeepSeq a => a -> b -> b
-- | The deep analogue of $!.
($!!) :: DeepSeq a => (a -> b) -> a -> b
-- | Evaluates its argument to normal form, and then return it.
force :: DeepSeq a => a -> a
instance (GDeepSeq a, GDeepSeq b) => GDeepSeq (a :+: b)
instance (GDeepSeq a, GDeepSeq b) => GDeepSeq (a :*: b)
instance GDeepSeq a => GDeepSeq (M1 i c a)
instance DeepSeq a => GDeepSeq (K1 i a)
instance GDeepSeq U1
instance GDeepSeq V1
instance DeepSeq a => DeepSeq (Complex a)
instance (Integral a, DeepSeq a) => DeepSeq (Ratio a)
instance (DeepSeq a, DeepSeq b) => DeepSeq (Either a b)
instance DeepSeq a => DeepSeq (Maybe a)
instance DeepSeq a => DeepSeq [a]
instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d, DeepSeq e, DeepSeq f, DeepSeq g) => DeepSeq (a, b, c, d, e, f, g)
instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d, DeepSeq e, DeepSeq f) => DeepSeq (a, b, c, d, e, f)
instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d, DeepSeq e) => DeepSeq (a, b, c, d, e)
instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d) => DeepSeq (a, b, c, d)
instance (DeepSeq a, DeepSeq b, DeepSeq c) => DeepSeq (a, b, c)
instance (DeepSeq a, DeepSeq b) => DeepSeq (a, b)
instance DeepSeq (a -> b)
instance DeepSeq Word64
instance DeepSeq Word32
instance DeepSeq Word16
instance DeepSeq Word8
instance DeepSeq Int64
instance DeepSeq Int32
instance DeepSeq Int16
instance DeepSeq Int8
instance DeepSeq ()
instance DeepSeq Ordering
instance DeepSeq Integer
instance DeepSeq Word
instance DeepSeq Int
instance DeepSeq Float
instance DeepSeq Double
instance DeepSeq Char
instance DeepSeq Bool