Skip to content

Commit 7855c42

Browse files
phadejtreeowl
authored andcommitted
Add NFData CPP
1 parent 502f389 commit 7855c42

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

Data/HashMap/Internal.hs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ import Data.Word (Word)
146146
#if __GLASGOW_HASKELL__ >= 711
147147
import Data.Semigroup (Semigroup((<>)))
148148
#endif
149-
import Control.DeepSeq (NFData(rnf), NFData2(liftRnf2), NFData1(liftRnf))
149+
import Control.DeepSeq (NFData(rnf))
150150
import Control.Monad.ST (ST)
151151
import Data.Bits ((.&.), (.|.), complement, popCount, unsafeShiftL, unsafeShiftR)
152152
import Data.Data hiding (Typeable)
@@ -178,6 +178,10 @@ import GHC.Stack
178178
import qualified Data.Hashable.Lifted as H
179179
#endif
180180

181+
#if MIN_VERSION_deepseq(1,4,3)
182+
import qualified Control.DeepSeq as NF
183+
#endif
184+
181185
#if __GLASGOW_HASKELL__ >= 802
182186
import GHC.Exts (TYPE, Int (..), Int#)
183187
#endif
@@ -201,11 +205,13 @@ data Leaf k v = L !k v
201205
instance (NFData k, NFData v) => NFData (Leaf k v) where
202206
rnf (L k v) = rnf k `seq` rnf v
203207

204-
instance NFData k => NFData1 (Leaf k) where
205-
liftRnf rnf2 = liftRnf2 rnf rnf2
208+
#if MIN_VERSION_deepseq(1,4,3)
209+
instance NFData k => NF.NFData1 (Leaf k) where
210+
liftRnf rnf2 = NF.liftRnf2 rnf rnf2
206211

207-
instance NFData2 Leaf where
212+
instance NF.NFData2 Leaf where
208213
liftRnf2 rnf1 rnf2 (L k v) = rnf1 k `seq` rnf2 v
214+
#endif
209215

210216
-- Invariant: The length of the 1st argument to 'Full' is
211217
-- 2^bitsPerSubkey
@@ -229,15 +235,17 @@ instance (NFData k, NFData v) => NFData (HashMap k v) where
229235
rnf (Full ary) = rnf ary
230236
rnf (Collision _ ary) = rnf ary
231237

232-
instance NFData k => NFData1 (HashMap k) where
233-
liftRnf rnf2 = liftRnf2 rnf rnf2
238+
#if MIN_VERSION_deepseq(1,4,3)
239+
instance NFData k => NF.NFData1 (HashMap k) where
240+
liftRnf rnf2 = NF.liftRnf2 rnf rnf2
234241

235-
instance NFData2 HashMap where
242+
instance NF.NFData2 HashMap where
236243
liftRnf2 _ _ Empty = ()
237-
liftRnf2 rnf1 rnf2 (BitmapIndexed _ ary) = liftRnf (liftRnf2 rnf1 rnf2) ary
238-
liftRnf2 rnf1 rnf2 (Leaf _ l) = liftRnf2 rnf1 rnf2 l
239-
liftRnf2 rnf1 rnf2 (Full ary) = liftRnf (liftRnf2 rnf1 rnf2) ary
240-
liftRnf2 rnf1 rnf2 (Collision _ ary) = liftRnf (liftRnf2 rnf1 rnf2) ary
244+
liftRnf2 rnf1 rnf2 (BitmapIndexed _ ary) = NF.liftRnf (NF.liftRnf2 rnf1 rnf2) ary
245+
liftRnf2 rnf1 rnf2 (Leaf _ l) = NF.liftRnf2 rnf1 rnf2 l
246+
liftRnf2 rnf1 rnf2 (Full ary) = NF.liftRnf (NF.liftRnf2 rnf1 rnf2) ary
247+
liftRnf2 rnf1 rnf2 (Collision _ ary) = NF.liftRnf (NF.liftRnf2 rnf1 rnf2) ary
248+
#endif
241249

242250
instance Functor (HashMap k) where
243251
fmap = map

Data/HashMap/Internal/Array.hs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ module Data.HashMap.Internal.Array
7575
import Control.Applicative (Applicative (..), (<$>))
7676
#endif
7777
import Control.Applicative (liftA2)
78-
import Control.DeepSeq
78+
import Control.DeepSeq (NFData (..))
7979
import GHC.Exts(Int(..), Int#, reallyUnsafePtrEquality#, tagToEnum#, unsafeCoerce#, State#)
8080
import GHC.ST (ST(..))
8181
import Control.Monad.ST (stToIO)
@@ -104,6 +104,10 @@ import Data.Monoid (Monoid (..))
104104
import qualified Prelude
105105
#endif
106106

107+
#if MIN_VERSION_deepseq(1,4,3)
108+
import qualified Control.DeepSeq as NF
109+
#endif
110+
107111
import Data.HashMap.Internal.Unsafe (runST)
108112
import Control.Monad ((>=>))
109113

@@ -250,7 +254,8 @@ rnfArray ary0 = go ary0 n0 0
250254
-- relevant rnf is strict, or in case it actually isn't.
251255
{-# INLINE rnfArray #-}
252256

253-
instance NFData1 Array where
257+
#if MIN_VERSION_deepseq(1,4,3)
258+
instance NF.NFData1 Array where
254259
liftRnf = liftRnfArray
255260

256261
liftRnfArray :: (a -> ()) -> Array a -> ()
@@ -262,6 +267,7 @@ liftRnfArray rnf0 ary0 = go ary0 n0 0
262267
| (# x #) <- index# ary i
263268
= rnf0 x `seq` go ary n (i+1)
264269
{-# INLINE liftRnfArray #-}
270+
#endif
265271

266272
-- | Create a new mutable array of specified size, in the specified
267273
-- state thread, with each element containing the specified initial

Data/HashSet/Internal.hs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ module Data.HashSet.Internal
9292
, keysSet
9393
) where
9494

95-
import Control.DeepSeq (NFData(..), NFData1(..), NFData2 (liftRnf2))
95+
import Control.DeepSeq (NFData(..))
9696
import Data.Data hiding (Typeable)
9797
import Data.HashMap.Internal
9898
( HashMap, foldMapWithKey, foldlWithKey, foldrWithKey
@@ -123,6 +123,10 @@ import Data.Functor.Classes
123123
import qualified Data.Hashable.Lifted as H
124124
#endif
125125

126+
#if MIN_VERSION_deepseq(1,4,3)
127+
import qualified Control.DeepSeq as NF
128+
#endif
129+
126130
import Data.Functor ((<$))
127131

128132
-- | A set of values. A set cannot contain duplicate values.
@@ -138,8 +142,10 @@ instance (NFData a) => NFData (HashSet a) where
138142
rnf = rnf . asMap
139143
{-# INLINE rnf #-}
140144

141-
instance NFData1 HashSet where
142-
liftRnf rnf1 = liftRnf2 rnf1 rnf . asMap
145+
#if MIN_VERSION_deepseq(1,4,3)
146+
instance NF.NFData1 HashSet where
147+
liftRnf rnf1 = NF.liftRnf2 rnf1 rnf . asMap
148+
#endif
143149

144150
-- | Note that, in the presence of hash collisions, equal @HashSet@s may
145151
-- behave differently, i.e. substitutivity may be violated:

0 commit comments

Comments
 (0)