Bryan O'Sullivan avatar Bryan O'Sullivan committed 92cb87a

Try an even more robust way of handling containers.

Comments (0)

Files changed (2)

Data/Aeson/Types/Internal.hs

              deriving (Eq, Show, Typeable, Data)
 
 instance NFData Value where
-    rnf (Object o) = rnf o
+    rnf (Object o) = obj_rnf o
     rnf (Array a)  = V.foldl' (\x y -> rnf y `seq` x) () a
     rnf (String s) = rnf s
     rnf (Number n) = case n of I i -> rnf i; D d -> rnf d
     rnf (Bool b)   = rnf b
     rnf Null       = ()
 
+obj_rnf :: (NFData k, NFData v) => Map k v -> ()
+#if MIN_VERSION_containers(0,4,2)
+obj_rnf = rnf
+#else
+obj_rnf M.Tip = ()
+obj_rnf (M.Bin _ kx x l r) = rnf kx `seq` rnf x `seq` rnf l `seq` rnf r
+#endif
+
 instance IsString Value where
     fromString = String . pack
     {-# INLINE fromString #-}
     blaze-builder >= 0.2.1.4,
     blaze-textual >= 0.2.0.2,
     bytestring,
+    containers,
+    deepseq,
     hashable >= 1.1.2.0,
     mtl,
     old-locale,
     syb,
+    template-haskell >= 2.4,
     text >= 0.11.0.2,
-    template-haskell >= 2.4,
     time,
     unordered-containers >= 0.1.3.0,
     vector >= 0.7.1
 
-  if impl(ghc < 7.2)
-    build-depends:
-      containers < 0.4.2,
-      deepseq < 1.2
-  else
-    build-depends:
-      containers >= 0.4.2,
-      deepseq >= 1.2
-
   if flag(developer)
     ghc-options: -Werror
     ghc-prof-options: -auto-all
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.