Repository : ssh://darcs.haskell.org//srv/darcs/packages/containers

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/6d68ed7f7b72ca925a06eab63a83d765b4aaf404

>---------------------------------------------------------------

commit 6d68ed7f7b72ca925a06eab63a83d765b4aaf404
Author: Ian Lynagh <[email protected]>
Date:   Thu Sep 8 12:19:19 2011 +0100

    Define deepseq instances; part of #5468

>---------------------------------------------------------------

 Data/IntMap.hs   |    6 ++++++
 Data/IntSet.hs   |   10 ++++++++++
 Data/Map.hs      |    5 +++++
 Data/Set.hs      |    9 +++++++++
 Data/Tree.hs     |    4 ++++
 containers.cabal |    2 +-
 6 files changed, 35 insertions(+), 1 deletions(-)

diff --git a/Data/IntMap.hs b/Data/IntMap.hs
index aef81cd..b214d90 100644
--- a/Data/IntMap.hs
+++ b/Data/IntMap.hs
@@ -196,6 +196,7 @@ import qualified Data.Foldable as Foldable
 import Data.Traversable (Traversable(traverse))
 import Control.Applicative (Applicative(pure,(<*>)),(<$>))
 import Control.Monad ( liftM )
+import Control.DeepSeq (NFData(rnf))
 {-
 -- just for testing
 import qualified Prelude
@@ -306,6 +307,11 @@ instance Traversable IntMap where
     traverse f (Tip k v) = Tip k <$> f v
     traverse f (Bin p m l r) = Bin p m <$> traverse f l <*> traverse f r
 
+instance NFData a => NFData (IntMap a) where
+    rnf Nil = ()
+    rnf (Tip _ v) = rnf v
+    rnf (Bin _ _ l r) = rnf l `seq` rnf r
+
 #if __GLASGOW_HASKELL__
 
 {--------------------------------------------------------------------
diff --git a/Data/IntSet.hs b/Data/IntSet.hs
index 5679cfc..f19243f 100644
--- a/Data/IntSet.hs
+++ b/Data/IntSet.hs
@@ -132,6 +132,7 @@ import qualified Data.List as List
 import Data.Monoid (Monoid(..))
 import Data.Maybe (fromMaybe)
 import Data.Typeable
+import Control.DeepSeq (NFData)
 
 #if __GLASGOW_HASKELL__
 import Text.Read
@@ -890,6 +891,15 @@ instance Read IntSet where
 INSTANCE_TYPEABLE0(IntSet,intSetTc,"IntSet")
 
 {--------------------------------------------------------------------
+  NFData
+--------------------------------------------------------------------}
+
+-- The IntSet constructors consist only of strict fields of Ints and
+-- IntSets, thus the default NFData instance which evaluates to whnf
+-- should suffice
+instance NFData IntSet
+
+{--------------------------------------------------------------------
   Debugging
 --------------------------------------------------------------------}
 -- | /O(n)/. Show the tree that implements the set. The tree is shown
diff --git a/Data/Map.hs b/Data/Map.hs
index faac867..73b50d0 100644
--- a/Data/Map.hs
+++ b/Data/Map.hs
@@ -223,6 +223,7 @@ import Control.Applicative (Applicative(..), (<$>))
 import Data.Traversable (Traversable(traverse))
 import qualified Data.Foldable as Foldable
 import Data.Typeable
+import Control.DeepSeq (NFData(rnf))
 
 #if __GLASGOW_HASKELL__
 import Text.Read
@@ -2468,6 +2469,10 @@ instance Foldable.Foldable (Map k) where
   foldMap _ Tip = mempty
   foldMap f (Bin _ _ v l r) = Foldable.foldMap f l `mappend` f v `mappend` 
Foldable.foldMap f r
 
+instance (NFData k, NFData a) => NFData (Map k a) where
+    rnf Tip = ()
+    rnf (Bin _ kx x l r) = rnf kx `seq` rnf x `seq` rnf l `seq` rnf r
+
 {--------------------------------------------------------------------
   Read
 --------------------------------------------------------------------}
diff --git a/Data/Set.hs b/Data/Set.hs
index 37ce876..881e0d6 100644
--- a/Data/Set.hs
+++ b/Data/Set.hs
@@ -142,6 +142,7 @@ import qualified Data.List as List
 import Data.Monoid (Monoid(..))
 import qualified Data.Foldable as Foldable
 import Data.Typeable
+import Control.DeepSeq (NFData(rnf))
 
 {-
 -- just for testing
@@ -747,6 +748,14 @@ instance (Read a, Ord a) => Read (Set a) where
 INSTANCE_TYPEABLE1(Set,setTc,"Set")
 
 {--------------------------------------------------------------------
+  NFData
+--------------------------------------------------------------------}
+
+instance NFData a => NFData (Set a) where
+    rnf Tip           = ()
+    rnf (Bin _ y l r) = rnf y `seq` rnf l `seq` rnf r
+
+{--------------------------------------------------------------------
   Utility functions that return sub-ranges of the original
   tree. Some functions take a `Maybe value` as an argument to
   allow comparisons against infinite values. These are called `blow`
diff --git a/Data/Tree.hs b/Data/Tree.hs
index 40de39a..4f00b0d 100644
--- a/Data/Tree.hs
+++ b/Data/Tree.hs
@@ -35,6 +35,7 @@ import Data.Sequence (Seq, empty, singleton, (<|), (|>), 
fromList,
 import Data.Foldable (Foldable(foldMap), toList)
 import Data.Traversable (Traversable(traverse))
 import Data.Typeable
+import Control.DeepSeq (NFData(rnf))
 
 #ifdef __GLASGOW_HASKELL__
 import Data.Data (Data)
@@ -74,6 +75,9 @@ instance Traversable Tree where
 instance Foldable Tree where
     foldMap f (Node x ts) = f x `mappend` foldMap (foldMap f) ts
 
+instance NFData a => NFData (Tree a) where
+    rnf (Node x ts) = rnf x `seq` rnf ts
+
 -- | Neat 2-dimensional drawing of a tree.
 drawTree :: Tree String -> String
 drawTree  = unlines . draw
diff --git a/containers.cabal b/containers.cabal
index 80d9d40..94390ce 100644
--- a/containers.cabal
+++ b/containers.cabal
@@ -20,7 +20,7 @@ source-repository head
     location: http://github.com/haskell/containers.git
 
 Library {
-    build-depends: base >= 4.2 && < 6, array
+    build-depends: base >= 4.2 && < 6, array, deepseq >= 1.2 && < 1.3
     ghc-options: -O2
     if impl(ghc>6.10)
         Ghc-Options: -fregs-graph



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to