@@ -146,7 +146,7 @@ import Data.Word (Word)
146
146
#if __GLASGOW_HASKELL__ >= 711
147
147
import Data.Semigroup (Semigroup ((<>) ))
148
148
#endif
149
- import Control.DeepSeq (NFData (rnf ))
149
+ import Control.DeepSeq (NFData (rnf ), NFData2 ( liftRnf2 ), NFData1 ( liftRnf ) )
150
150
import Control.Monad.ST (ST )
151
151
import Data.Bits ((.&.) , (.|.) , complement , popCount , unsafeShiftL , unsafeShiftR )
152
152
import Data.Data hiding (Typeable )
@@ -201,6 +201,12 @@ data Leaf k v = L !k v
201
201
instance (NFData k , NFData v ) => NFData (Leaf k v ) where
202
202
rnf (L k v) = rnf k `seq` rnf v
203
203
204
+ instance NFData k => NFData1 (Leaf k ) where
205
+ liftRnf rnf2 = liftRnf2 rnf rnf2
206
+
207
+ instance NFData2 Leaf where
208
+ liftRnf2 rnf1 rnf2 (L k v) = rnf1 k `seq` rnf2 v
209
+
204
210
-- Invariant: The length of the 1st argument to 'Full' is
205
211
-- 2^bitsPerSubkey
206
212
@@ -223,6 +229,16 @@ instance (NFData k, NFData v) => NFData (HashMap k v) where
223
229
rnf (Full ary) = rnf ary
224
230
rnf (Collision _ ary) = rnf ary
225
231
232
+ instance NFData k => NFData1 (HashMap k ) where
233
+ liftRnf rnf2 = liftRnf2 rnf rnf2
234
+
235
+ instance NFData2 HashMap where
236
+ 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
241
+
226
242
instance Functor (HashMap k ) where
227
243
fmap = map
228
244
0 commit comments