deepseq 1.0.0.0 → 1.1.0.0
raw patch · 2 files changed
+139/−132 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.DeepSeq: class DeepSeq a
- Control.DeepSeq: class (DeepSeq a, Integral a) => DeepSeqIntegral a
- Control.DeepSeq: class (DeepSeq a, Ord a) => DeepSeqOrd a
- Control.DeepSeq: instance (DeepSeq a) => DeepSeq (IntMap a)
- Control.DeepSeq: instance (DeepSeq a) => DeepSeq (Maybe a)
- Control.DeepSeq: instance (DeepSeq a) => DeepSeq (Set a)
- Control.DeepSeq: instance (DeepSeq a) => DeepSeq (Tree a)
- Control.DeepSeq: instance (DeepSeq a) => DeepSeq [a]
- Control.DeepSeq: instance (DeepSeq a, DeepSeq b) => DeepSeq (Either a b)
- Control.DeepSeq: instance (DeepSeq a, DeepSeq b) => DeepSeq (a, b)
- Control.DeepSeq: instance (DeepSeq a, DeepSeq b, DeepSeq c) => DeepSeq (a, b, c)
- Control.DeepSeq: instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d) => DeepSeq (a, b, c, d)
- Control.DeepSeq: instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5) => DeepSeq (a1, a2, a3, a4, a5)
- Control.DeepSeq: instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6) => DeepSeq (a1, a2, a3, a4, a5, a6)
- Control.DeepSeq: instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7) => DeepSeq (a1, a2, a3, a4, a5, a6, a7)
- Control.DeepSeq: instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8) => DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8)
- Control.DeepSeq: instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8, DeepSeq a9) => DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8, a9)
- Control.DeepSeq: instance (DeepSeq k, DeepSeq a) => DeepSeq (Map k a)
- Control.DeepSeq: instance (Integral a, DeepSeq a) => DeepSeq (Ratio a)
- Control.DeepSeq: instance (Ix a, DeepSeq a, DeepSeq b) => DeepSeq (Array a b)
- Control.DeepSeq: instance (RealFloat a, DeepSeq a) => DeepSeq (Complex a)
- Control.DeepSeq: instance DeepSeq ()
- Control.DeepSeq: instance DeepSeq Bool
- Control.DeepSeq: instance DeepSeq Char
- Control.DeepSeq: instance DeepSeq Double
- Control.DeepSeq: instance DeepSeq Float
- Control.DeepSeq: instance DeepSeq Int
- Control.DeepSeq: instance DeepSeq Int16
- Control.DeepSeq: instance DeepSeq Int32
- Control.DeepSeq: instance DeepSeq Int64
- Control.DeepSeq: instance DeepSeq Int8
- Control.DeepSeq: instance DeepSeq IntSet
- Control.DeepSeq: instance DeepSeq Integer
- Control.DeepSeq: instance DeepSeq Word
- Control.DeepSeq: instance DeepSeq Word16
- Control.DeepSeq: instance DeepSeq Word32
- Control.DeepSeq: instance DeepSeq Word64
- Control.DeepSeq: instance DeepSeq Word8
- Control.DeepSeq: instance DeepSeqIntegral Int
- Control.DeepSeq: instance DeepSeqOrd Int
+ Control.DeepSeq: class NFData a
+ Control.DeepSeq: instance (Integral a, NFData a) => NFData (Ratio a)
+ Control.DeepSeq: instance (Ix a, NFData a, NFData b) => NFData (Array a b)
+ Control.DeepSeq: instance (NFData a, NFData b) => NFData (Either a b)
+ Control.DeepSeq: instance (NFData a, NFData b) => NFData (a, b)
+ Control.DeepSeq: instance (NFData a, NFData b, NFData c) => NFData (a, b, c)
+ Control.DeepSeq: instance (NFData a, NFData b, NFData c, NFData d) => NFData (a, b, c, d)
+ Control.DeepSeq: instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => NFData (a1, a2, a3, a4, a5)
+ Control.DeepSeq: instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => NFData (a1, a2, a3, a4, a5, a6)
+ Control.DeepSeq: instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => NFData (a1, a2, a3, a4, a5, a6, a7)
+ Control.DeepSeq: instance (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)
+ Control.DeepSeq: instance (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)
+ Control.DeepSeq: instance (NFData k, NFData a) => NFData (Map k a)
+ Control.DeepSeq: instance (RealFloat a, NFData a) => NFData (Complex a)
+ Control.DeepSeq: instance NFData ()
+ Control.DeepSeq: instance NFData Bool
+ Control.DeepSeq: instance NFData Char
+ Control.DeepSeq: instance NFData Double
+ Control.DeepSeq: instance NFData Float
+ Control.DeepSeq: instance NFData Int
+ Control.DeepSeq: instance NFData Int16
+ Control.DeepSeq: instance NFData Int32
+ Control.DeepSeq: instance NFData Int64
+ Control.DeepSeq: instance NFData Int8
+ Control.DeepSeq: instance NFData IntSet
+ Control.DeepSeq: instance NFData Integer
+ Control.DeepSeq: instance NFData Word
+ Control.DeepSeq: instance NFData Word16
+ Control.DeepSeq: instance NFData Word32
+ Control.DeepSeq: instance NFData Word64
+ Control.DeepSeq: instance NFData Word8
+ Control.DeepSeq: instance NFData a => NFData (IntMap a)
+ Control.DeepSeq: instance NFData a => NFData (Maybe a)
+ Control.DeepSeq: instance NFData a => NFData (Set a)
+ Control.DeepSeq: instance NFData a => NFData (Tree a)
+ Control.DeepSeq: instance NFData a => NFData [a]
+ Control.DeepSeq: rnf :: NFData a => a -> ()
- Control.DeepSeq: deepseq :: (DeepSeq a) => a -> ()
+ Control.DeepSeq: deepseq :: NFData a => a -> b -> b
Files
- Control/DeepSeq.hs +133/−130
- deepseq.cabal +6/−2
Control/DeepSeq.hs view
@@ -13,7 +13,8 @@ -- module Control.DeepSeq (- DeepSeq(..), DeepSeqIntegral, DeepSeqOrd+ deepseq,+ NFData(..), ) where import Data.Int@@ -27,161 +28,163 @@ import Data.Tree import Data.Array +-- | Fully evaluates its argument. 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+deepseq a b = rnf a `seq` b+ -- A class of types that can be fully evaluated.-class DeepSeq a where- -- | Fully evaluates its argument. 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.+class NFData a where+ -- | rnf should reduce its argument to normal form (that is, fully+ -- evaluate all sub-components), and then return '()'.+ -- + -- The default implementation of 'rnf' is --- -- The default implementation of 'deepseq' is simply 'seq', which- -- may be convenient when defining instances for data types with+ -- > rnf a = a `seq` ()+ -- + -- which may be convenient when defining instances for data types with -- no unevaluated fields (e.g. enumerations).- --- deepseq :: a -> ()- deepseq a = a `seq` ()--class (DeepSeq a, Integral a) => DeepSeqIntegral a-class (DeepSeq a, Ord a) => DeepSeqOrd a--instance DeepSeq Int -instance DeepSeq Word-instance DeepSeq Integer-instance DeepSeq Float-instance DeepSeq Double+ rnf :: a -> ()+ rnf a = a `seq` () -instance DeepSeq Char-instance DeepSeq Bool-instance DeepSeq ()+instance NFData Int +instance NFData Word+instance NFData Integer+instance NFData Float+instance NFData Double -instance DeepSeq Int8-instance DeepSeq Int16-instance DeepSeq Int32-instance DeepSeq Int64+instance NFData Char+instance NFData Bool+instance NFData () -instance DeepSeq Word8-instance DeepSeq Word16-instance DeepSeq Word32-instance DeepSeq Word64+instance NFData Int8+instance NFData Int16+instance NFData Int32+instance NFData Int64 -instance DeepSeqIntegral Int-instance DeepSeqOrd Int+instance NFData Word8+instance NFData Word16+instance NFData Word32+instance NFData Word64 --Rational and complex numbers. -instance (Integral a, DeepSeq a) => DeepSeq (Ratio a) where- deepseq x = deepseq (numerator x, denominator x)+instance (Integral a, NFData a) => NFData (Ratio a) where+ rnf x = rnf (numerator x, denominator x) -instance (RealFloat a, DeepSeq a) => DeepSeq (Complex a) where- deepseq (x:+y) = deepseq x `seq` - deepseq y `seq`+instance (RealFloat a, NFData a) => NFData (Complex a) where+ rnf (x:+y) = rnf x `seq` + rnf y `seq` () -instance DeepSeq a => DeepSeq (Maybe a) where- deepseq Nothing = ()- deepseq (Just x) = deepseq x+instance NFData a => NFData (Maybe a) where+ rnf Nothing = ()+ rnf (Just x) = rnf x -instance (DeepSeq a, DeepSeq b) => DeepSeq (Either a b) where- deepseq (Left x) = deepseq x- deepseq (Right y) = deepseq y+instance (NFData a, NFData b) => NFData (Either a b) where+ rnf (Left x) = rnf x+ rnf (Right y) = rnf y -instance (DeepSeq k, DeepSeq a) => DeepSeq (Data.Map.Map k a) where- deepseq = deepseq . Data.Map.toList+instance (NFData k, NFData a) => NFData (Data.Map.Map k a) where+ rnf = rnf . Data.Map.toList -instance DeepSeq a => DeepSeq (Data.Set.Set a) where- deepseq = deepseq . Data.Set.toList+instance NFData a => NFData (Data.Set.Set a) where+ rnf = rnf . Data.Set.toList -instance DeepSeq a => DeepSeq (Data.Tree.Tree a) where- deepseq (Data.Tree.Node r f) = deepseq r `seq` deepseq f+instance NFData a => NFData (Data.Tree.Tree a) where+ rnf (Data.Tree.Node r f) = rnf r `seq` rnf f -instance DeepSeq a => DeepSeq (Data.IntMap.IntMap a) where- deepseq = deepseq . Data.IntMap.toList+instance NFData a => NFData (Data.IntMap.IntMap a) where+ rnf = rnf . Data.IntMap.toList -instance DeepSeq Data.IntSet.IntSet where- deepseq = deepseq . Data.IntSet.toList+instance NFData Data.IntSet.IntSet where+ rnf = rnf . Data.IntSet.toList -instance DeepSeq a => DeepSeq [a] where- deepseq [] = ()- deepseq (x:xs) = deepseq x `seq` deepseq xs+instance NFData a => NFData [a] where+ rnf [] = ()+ rnf (x:xs) = rnf x `seq` rnf xs -instance (Ix a, DeepSeq a, DeepSeq b) => DeepSeq (Array a b) where- deepseq x = deepseq (bounds x, Data.Array.elems x)+instance (Ix a, NFData a, NFData b) => NFData (Array a b) where+ rnf x = rnf (bounds x, Data.Array.elems x) -instance (DeepSeq a, DeepSeq b) => DeepSeq (a,b) where- deepseq (x,y) = deepseq x `seq` deepseq y+instance (NFData a, NFData b) => NFData (a,b) where+ rnf (x,y) = rnf x `seq` rnf y -instance (DeepSeq a, DeepSeq b, DeepSeq c) => DeepSeq (a,b,c) where- deepseq (x,y,z) = deepseq x `seq` deepseq y `seq` deepseq z +instance (NFData a, NFData b, NFData c) => NFData (a,b,c) where+ rnf (x,y,z) = rnf x `seq` rnf y `seq` rnf z -instance (DeepSeq a, DeepSeq b, DeepSeq c, DeepSeq d) => DeepSeq (a,b,c,d) where- deepseq (x1,x2,x3,x4) = deepseq x1 `seq` - deepseq x2 `seq` - deepseq x3 `seq` - deepseq x4 +instance (NFData a, NFData b, NFData c, NFData d) => NFData (a,b,c,d) where+ rnf (x1,x2,x3,x4) = rnf x1 `seq` + rnf x2 `seq` + rnf x3 `seq` + rnf x4 -instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5) => - DeepSeq (a1, a2, a3, a4, a5) where- deepseq (x1, x2, x3, x4, x5) =- deepseq x1 `seq`- deepseq x2 `seq`- deepseq x3 `seq`- deepseq x4 `seq`- deepseq x5+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5) => + NFData (a1, a2, a3, a4, a5) where+ rnf (x1, x2, x3, x4, x5) =+ rnf x1 `seq`+ rnf x2 `seq`+ rnf x3 `seq`+ rnf x4 `seq`+ rnf x5 -instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6) => - DeepSeq (a1, a2, a3, a4, a5, a6) where- deepseq (x1, x2, x3, x4, x5, x6) =- deepseq x1 `seq`- deepseq x2 `seq`- deepseq x3 `seq`- deepseq x4 `seq`- deepseq x5 `seq`- deepseq x6+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6) => + NFData (a1, a2, a3, a4, a5, a6) where+ rnf (x1, x2, x3, x4, x5, x6) =+ rnf x1 `seq`+ rnf x2 `seq`+ rnf x3 `seq`+ rnf x4 `seq`+ rnf x5 `seq`+ rnf x6 -instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7) => - DeepSeq (a1, a2, a3, a4, a5, a6, a7) where- deepseq (x1, x2, x3, x4, x5, x6, x7) =- deepseq x1 `seq`- deepseq x2 `seq`- deepseq x3 `seq`- deepseq x4 `seq`- deepseq x5 `seq`- deepseq x6 `seq`- deepseq x7+instance (NFData a1, NFData a2, NFData a3, NFData a4, NFData a5, NFData a6, NFData a7) => + NFData (a1, a2, a3, a4, a5, a6, a7) where+ rnf (x1, x2, x3, x4, x5, x6, x7) =+ rnf x1 `seq`+ rnf x2 `seq`+ rnf x3 `seq`+ rnf x4 `seq`+ rnf x5 `seq`+ rnf x6 `seq`+ rnf x7 -instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8) => - DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8) where- deepseq (x1, x2, x3, x4, x5, x6, x7, x8) =- deepseq x1 `seq`- deepseq x2 `seq`- deepseq x3 `seq`- deepseq x4 `seq`- deepseq x5 `seq`- deepseq x6 `seq`- deepseq x7 `seq`- deepseq x8+instance (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) where+ rnf (x1, x2, x3, x4, x5, x6, x7, x8) =+ rnf x1 `seq`+ rnf x2 `seq`+ rnf x3 `seq`+ rnf x4 `seq`+ rnf x5 `seq`+ rnf x6 `seq`+ rnf x7 `seq`+ rnf x8 -instance (DeepSeq a1, DeepSeq a2, DeepSeq a3, DeepSeq a4, DeepSeq a5, DeepSeq a6, DeepSeq a7, DeepSeq a8, DeepSeq a9) => - DeepSeq (a1, a2, a3, a4, a5, a6, a7, a8, a9) where- deepseq (x1, x2, x3, x4, x5, x6, x7, x8, x9) =- deepseq x1 `seq`- deepseq x2 `seq`- deepseq x3 `seq`- deepseq x4 `seq`- deepseq x5 `seq`- deepseq x6 `seq`- deepseq x7 `seq`- deepseq x8 `seq`- deepseq x9+instance (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) where+ rnf (x1, x2, x3, x4, x5, x6, x7, x8, x9) =+ rnf x1 `seq`+ rnf x2 `seq`+ rnf x3 `seq`+ rnf x4 `seq`+ rnf x5 `seq`+ rnf x6 `seq`+ rnf x7 `seq`+ rnf x8 `seq`+ rnf x9
deepseq.cabal view
@@ -1,5 +1,5 @@ name: deepseq-version: 1.0.0.0+version: 1.1.0.0 license: BSD3 license-file: LICENSE maintainer: libraries@haskell.org@@ -9,7 +9,11 @@ This package provides a \"deep\" version of seq, for fully evluating data structures. build-type: Simple-cabal-version: >=1.2+cabal-version: >=1.6++source-repository head+ type: darcs+ location: http://darcs.haskell.org/packages/deepseq/ library { exposed-modules: Control.DeepSeq