Drop support for pre-7.6 GHC
authorDavid Feuer <David.Feuer@gmail.com>
Fri, 9 Mar 2018 17:19:18 +0000 (12:19 -0500)
committerDavid Feuer <David.Feuer@gmail.com>
Fri, 9 Mar 2018 18:57:43 +0000 (13:57 -0500)
* Bump base dependency
* Bump `array` dependency
* Assume at least 7.6 when compiling with GHC
* Drop support for compiling without MIN_VERSION macros. These
  are now built into GHC. We can add some sort of support back
  if we expand to a non-GHC compiler, but that support will look
  completely different anyway.
* Remove deprecated `Data.Map.Lazy.Merge` and `Data.Map.Strict.Merge`
  modules. These were renamed almost immediately after they were
  introduced.
* Update changelog

33 files changed:
.travis.yml
Data/Containers/ListUtils.hs
Data/Graph.hs
Data/IntMap.hs
Data/IntMap/Internal.hs
Data/IntMap/Lazy.hs
Data/IntMap/Merge/Lazy.hs
Data/IntMap/Merge/Strict.hs
Data/IntMap/Strict.hs
Data/IntSet.hs
Data/IntSet/Internal.hs
Data/Map.hs
Data/Map/Internal.hs
Data/Map/Lazy.hs
Data/Map/Lazy/Merge.hs [deleted file]
Data/Map/Merge/Lazy.hs
Data/Map/Merge/Strict.hs
Data/Map/Strict.hs
Data/Map/Strict/Internal.hs
Data/Map/Strict/Merge.hs [deleted file]
Data/Sequence/Internal.hs
Data/Set.hs
Data/Set/Internal.hs
Data/Tree.hs
Utils/Containers/Internal/BitQueue.hs
Utils/Containers/Internal/BitUtil.hs
Utils/Containers/Internal/StrictPair.hs
changelog.md
containers.cabal
include/containers.h
tests/intset-properties.hs
tests/seq-properties.hs
tests/tree-properties.hs

index b775d15..1edd731 100644 (file)
@@ -2,10 +2,6 @@
 
 # See also https://github.com/hvr/multi-ghc-travis for more information
 env:
- - GHCVER=7.0.4 CABALVER=1.16
- # we have to use CABALVER=1.16 for GHC<7.6 as well, as there's
- # no package for earlier cabal versions in the PPA
- - GHCVER=7.4.2 CABALVER=1.16
  - GHCVER=7.6.3 CABALVER=1.16
  - GHCVER=7.8.4 CABALVER=1.18
  - GHCVER=7.10.3 CABALVER=1.22
index 81b7da3..419c4b0 100644 (file)
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE BangPatterns #-}
-#if __GLASGOW_HASKELL__ >= 703
+#ifdef __GLASGOW_HASKELL__
 {-# LANGUAGE Trustworthy #-}
 #endif
 
index 7f193d0..535d20f 100644 (file)
@@ -1,15 +1,10 @@
 {-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__
-{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE StandaloneDeriving #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 703
-{-# LANGUAGE Trustworthy #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE Trustworthy #-}
 #endif
 
 #include "containers.h"
@@ -120,15 +115,11 @@ import Data.List
 import Data.Functor.Classes
 import Data.Semigroup (Semigroup (..))
 #endif
-#if __GLASGOW_HASKELL__ >= 706
-import GHC.Generics (Generic, Generic1)
-#elif __GLASGOW_HASKELL__ >= 702
-import GHC.Generics (Generic)
-#endif
 #ifdef __GLASGOW_HASKELL__
+import GHC.Generics (Generic, Generic1)
 import Data.Data (Data)
-#endif
 import Data.Typeable
+#endif
 
 
 -------------------------------------------------------------------------
@@ -156,14 +147,10 @@ INSTANCE_TYPEABLE1(SCC)
 #ifdef __GLASGOW_HASKELL__
 -- | @since 0.5.9
 deriving instance Data vertex => Data (SCC vertex)
-#endif
 
-#if __GLASGOW_HASKELL__ >= 706
 -- | @since 0.5.9
 deriving instance Generic1 SCC
-#endif
 
-#if __GLASGOW_HASKELL__ >= 702
 -- | @since 0.5.9
 deriving instance Generic (SCC vertex)
 #endif
index 879b3af..f73adcb 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index 8f7792e..51ec47f 100644 (file)
@@ -5,7 +5,7 @@
 {-# LANGUAGE MagicHash, DeriveDataTypeable, StandaloneDeriving #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
@@ -444,13 +444,10 @@ instance Foldable.Foldable IntMap where
           go (Tip _ v) = f v
           go (Bin _ _ l r) = go l `mappend` go r
   {-# INLINE foldMap #-}
-
-#if MIN_VERSION_base(4,6,0)
   foldl' = foldl'
   {-# INLINE foldl' #-}
   foldr' = foldr'
   {-# INLINE foldr' #-}
-#endif
 #if MIN_VERSION_base(4,8,0)
   length = size
   {-# INLINE length #-}
index 4ccbcc9..c878652 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index e271962..261124f 100644 (file)
@@ -3,7 +3,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
index 3f6f30f..100708c 100644 (file)
@@ -3,7 +3,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
index bd165a3..8f68a9e 100644 (file)
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE BangPatterns #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 
index 672f16f..c883411 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index 4f004b2..0540e7a 100644 (file)
@@ -3,7 +3,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE MagicHash, DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
index e4ff129..d80804b 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index d0c1b97..7d2ecd2 100644 (file)
@@ -4,7 +4,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if __GLASGOW_HASKELL__ >= 703
+#if defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
@@ -4142,13 +4142,10 @@ instance Foldable.Foldable (Map k) where
           go (Bin 1 _ v _ _) = f v
           go (Bin _ _ v l r) = go l `mappend` (f v `mappend` go r)
   {-# INLINE foldMap #-}
-
-#if MIN_VERSION_base(4,6,0)
   foldl' = foldl'
   {-# INLINE foldl' #-}
   foldr' = foldr'
   {-# INLINE foldr' #-}
-#endif
 #if MIN_VERSION_base(4,8,0)
   length = size
   {-# INLINE length #-}
index 1bdf3c1..e951003 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if __GLASGOW_HASKELL__ >= 703
+#if defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
diff --git a/Data/Map/Lazy/Merge.hs b/Data/Map/Lazy/Merge.hs
deleted file mode 100644 (file)
index 82a55f7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
-{-# LANGUAGE Safe #-}
-#endif
-
-#include "containers.h"
-
-{-# OPTIONS_HADDOCK hide #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Map.Lazy.Merge
--- Copyright   :  (c) David Feuer 2016
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Portability :  portable
---
--- This module defines an API for writing functions that merge two
--- maps. The key functions are 'merge' and 'mergeA'.
--- Each of these can be used with several different "merge tactics".
---
--- The 'merge' and 'mergeA' functions are shared by
--- the lazy and strict modules. Only the choice of merge tactics
--- determines strictness. If you use 'Data.Map.Strict.Merge.mapMissing'
--- from "Data.Map.Strict.Merge" then the results will be forced before
--- they are inserted. If you use 'Data.Map.Lazy.Merge.mapMissing' from
--- this module then they will not.
---
--- == Efficiency note
---
--- The 'Category', 'Applicative', and 'Monad' instances for 'WhenMissing'
--- tactics are included because they are valid. However, they are
--- inefficient in many cases and should usually be avoided. The instances
--- for 'WhenMatched' tactics should not pose any major efficiency problems.
-
-module Data.Map.Lazy.Merge {-# DEPRECATED "Use \"Data.Map.Merge.Lazy\"." #-}
-    ( module Data.Map.Merge.Lazy ) where
-
-import Data.Map.Merge.Lazy
index 5d16cf8..cace54b 100644 (file)
@@ -3,7 +3,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
index 056da4b..f7d5241 100644 (file)
@@ -3,7 +3,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
index c889125..3d347ac 100644 (file)
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE BangPatterns #-}
-#if __GLASGOW_HASKELL__ >= 703
+#if defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index a0bced8..3639adb 100644 (file)
@@ -1,6 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE BangPatterns #-}
-#if __GLASGOW_HASKELL__ >= 703
+#if defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 {-# OPTIONS_HADDOCK not-home #-}
diff --git a/Data/Map/Strict/Merge.hs b/Data/Map/Strict/Merge.hs
deleted file mode 100644 (file)
index 5b7e99a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
-{-# LANGUAGE Safe #-}
-#endif
-
-#include "containers.h"
-
-{-# OPTIONS_HADDOCK hide #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Map.Strict.Merge
--- Copyright   :  (c) David Feuer 2016
--- License     :  BSD-style
--- Maintainer  :  libraries@haskell.org
--- Portability :  portable
---
--- This module defines an API for writing functions that merge two
--- maps. The key functions are 'merge' and 'mergeA'.
--- Each of these can be used with several different "merge tactics".
---
--- The 'merge' and 'mergeA' functions are shared by
--- the lazy and strict modules. Only the choice of merge tactics
--- determines strictness. If you use 'Data.Map.Strict.Merge.mapMissing'
--- from this module then the results will be forced before they are
--- inserted. If you use 'Data.Map.Lazy.Merge.mapMissing' from
--- "Data.Map.Lazy.Merge" then they will not.
---
--- == Efficiency note
---
--- The 'Category', 'Applicative', and 'Monad' instances for 'WhenMissing'
--- tactics are included because they are valid. However, they are
--- inefficient in many cases and should usually be avoided. The instances
--- for 'WhenMatched' tactics should not pose any major efficiency problems.
-
-module Data.Map.Strict.Merge {-# DEPRECATED "Use \"Data.Map.Merge.Strict\"." #-}
-  ( module Data.Map.Merge.Strict ) where
-
-import Data.Map.Merge.Strict
index 4693f5c..baa349d 100644 (file)
@@ -3,17 +3,13 @@
 {-# LANGUAGE BangPatterns #-}
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeFamilies #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 703
 {-# LANGUAGE Trustworthy #-}
 #endif
-#if __GLASGOW_HASKELL__ >= 702
-{-# LANGUAGE DeriveGeneric #-}
-#endif
 #ifdef DEFINE_PATTERN_SYNONYMS
 {-# LANGUAGE PatternSynonyms #-}
 {-# LANGUAGE ViewPatterns #-}
@@ -214,11 +210,7 @@ import Control.Monad (MonadPlus(..))
 import Data.Monoid (Monoid(..))
 import Data.Functor (Functor(..))
 import Utils.Containers.Internal.State (State(..), execState)
-#if MIN_VERSION_base(4,6,0)
 import Data.Foldable (Foldable(foldl, foldl1, foldr, foldr1, foldMap, foldl', foldr'), toList)
-#else
-import Data.Foldable (Foldable(foldl, foldl1, foldr, foldr1, foldMap), foldl', toList)
-#endif
 
 #if MIN_VERSION_base(4,9,0)
 import qualified Data.Semigroup as Semigroup
@@ -235,10 +227,8 @@ import Text.Read (Lexeme(Ident), lexP, parens, prec,
 import Data.Data
 import Data.String (IsString(..))
 #endif
-#if __GLASGOW_HASKELL__ >= 706
+#if __GLASGOW_HASKELL__
 import GHC.Generics (Generic, Generic1)
-#elif __GLASGOW_HASKELL__ >= 702
-import GHC.Generics (Generic)
 #endif
 
 -- Array stuff, with GHC.Arr on GHC
@@ -266,9 +256,7 @@ import Data.Word (Word)
 #endif
 
 import Utils.Containers.Internal.StrictPair (StrictPair (..), toPair)
-#if MIN_VERSION_base(4,4,0)
 import Control.Monad.Zip (MonadZip (..))
-#endif
 import Control.Monad.Fix (MonadFix (..), fix)
 
 default ()
@@ -400,7 +388,6 @@ instance Foldable Seq where
     {-# INLINABLE foldl #-}
 #endif
 
-#if MIN_VERSION_base(4,6,0)
     foldr' f z = foldr' (f .# getElem) z .# getSeq
     foldl' f z = foldl' (f .^# getElem) z .# getSeq
 
@@ -409,8 +396,6 @@ instance Foldable Seq where
     {-# INLINABLE foldl' #-}
 #endif
 
-#endif
-
     foldr1 f (Seq xs) = getElem (foldr1 f' xs)
       where f' (Elem x) (Elem y) = Elem (f x y)
 
@@ -1034,8 +1019,6 @@ instance Foldable FingerTree where
         foldlNodeN f z t = foldl f z t
     {-# INLINE foldl #-}
 
-
-#if MIN_VERSION_base(4,6,0)
     foldr' _ z' EmptyT = z'
     foldr' f' z' (Single x') = f' x' z'
     foldr' f' z' (Deep _ pr' m' sf') =
@@ -1076,7 +1059,6 @@ instance Foldable FingerTree where
         foldlNode' :: (b -> a -> b) -> b -> Node a -> b
         foldlNode' f z t = foldl' f z t
     {-# INLINE foldl' #-}
-#endif
 
     foldr1 _ EmptyT = error "foldr1: empty sequence"
     foldr1 _ (Single x) = x
@@ -1155,7 +1137,6 @@ instance Foldable Digit where
     foldl f z (Four a b c d) = (((z `f` a) `f` b) `f` c) `f` d
     {-# INLINE foldl #-}
 
-#if MIN_VERSION_base(4,6,0)
     foldr' f z (One a) = f a z
     foldr' f z (Two a b) = f a $! f b z
     foldr' f z (Three a b c) = f a $! f b $! f c z
@@ -1167,7 +1148,6 @@ instance Foldable Digit where
     foldl' f z (Three a b c) = (f $! (f $! f z a) b) c
     foldl' f z (Four a b c d) = (f $! (f $! (f $! f z a) b) c) d
     {-# INLINE foldl' #-}
-#endif
 
     foldr1 _ (One a) = a
     foldr1 f (Two a b) = a `f` b
@@ -1244,7 +1224,6 @@ instance Foldable Node where
     foldl f z (Node3 _ a b c) = ((z `f` a) `f` b) `f` c
     {-# INLINE foldl #-}
 
-#if MIN_VERSION_base(4,6,0)
     foldr' f z (Node2 _ a b) = f a $! f b z
     foldr' f z (Node3 _ a b c) = f a $! f b $! f c z
     {-# INLINE foldr' #-}
@@ -1252,7 +1231,6 @@ instance Foldable Node where
     foldl' f z (Node2 _ a b) = (f $! f z a) b
     foldl' f z (Node3 _ a b c) = (f $! (f $! f z a) b) c
     {-# INLINE foldl' #-}
-#endif
 
 instance Functor Node where
     {-# INLINE fmap #-}
@@ -1311,10 +1289,8 @@ instance Foldable Elem where
 #else
     foldMap f (Elem x) = f x
     foldl f z (Elem x) = f z x
-#if MIN_VERSION_base(4,6,0)
     foldl' f z (Elem x) = f z x
 #endif
-#endif
 
 instance Traversable Elem where
     traverse f (Elem x) = Elem <$> f x
@@ -1864,12 +1840,10 @@ data ViewL a
 
 #if __GLASGOW_HASKELL__
 deriving instance Data a => Data (ViewL a)
-#endif
-#if __GLASGOW_HASKELL__ >= 706
+
 -- | @since 0.5.8
 deriving instance Generic1 ViewL
-#endif
-#if __GLASGOW_HASKELL__ >= 702
+
 -- | @since 0.5.8
 deriving instance Generic (ViewL a)
 #endif
@@ -1931,12 +1905,10 @@ data ViewR a
 
 #if __GLASGOW_HASKELL__
 deriving instance Data a => Data (ViewR a)
-#endif
-#if __GLASGOW_HASKELL__ >= 706
+
 -- | @since 0.5.8
 deriving instance Generic1 ViewR
-#endif
-#if __GLASGOW_HASKELL__ >= 702
+
 -- | @since 0.5.8
 deriving instance Generic (ViewR a)
 #endif
@@ -4332,8 +4304,6 @@ splitMapNode splt f s (Node3 ns a b c) = Node3 ns (f first a) (f second b) (f th
 -- Zipping
 ------------------------------------------------------------------------
 
--- MonadZip appeared in base 4.4.0
-#if MIN_VERSION_base(4,4,0)
 -- We use a custom definition of munzip to avoid retaining
 -- memory longer than necessary. Using the default definition, if
 -- we write
@@ -4352,7 +4322,6 @@ splitMapNode splt f s (Node3 ns a b c) = Node3 ns (f first a) (f second b) (f th
 instance MonadZip Seq where
   mzipWith = zipWith
   munzip = unzip
-#endif
 
 -- | Unzip a sequence of pairs.
 --
index 7ac907d..2dea90b 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index 4470bd1..cd1bb2e 100644 (file)
@@ -4,7 +4,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Trustworthy #-}
 #endif
 #if __GLASGOW_HASKELL__ >= 708
@@ -317,13 +317,10 @@ instance Foldable.Foldable Set where
             go (Bin 1 k _ _) = f k
             go (Bin _ k l r) = go l `mappend` (f k `mappend` go r)
     {-# INLINE foldMap #-}
-
-#if MIN_VERSION_base(4,6,0)
     foldl' = foldl'
     {-# INLINE foldl' #-}
     foldr' = foldr'
     {-# INLINE foldr' #-}
-#endif
 #if MIN_VERSION_base(4,8,0)
     length = size
     {-# INLINE length #-}
index 5e3c353..23b4816 100644 (file)
@@ -2,11 +2,7 @@
 {-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 702
 {-# LANGUAGE DeriveGeneric #-}
-#endif
-#if __GLASGOW_HASKELL__ >= 703
 {-# LANGUAGE Trustworthy #-}
 #endif
 
@@ -56,16 +52,10 @@ import Control.DeepSeq (NFData(rnf))
 
 #ifdef __GLASGOW_HASKELL__
 import Data.Data (Data)
-#endif
-#if __GLASGOW_HASKELL__ >= 706
 import GHC.Generics (Generic, Generic1)
-#elif __GLASGOW_HASKELL__ >= 702
-import GHC.Generics (Generic)
 #endif
 
-#if MIN_VERSION_base(4,4,0)
 import Control.Monad.Zip (MonadZip (..))
-#endif
 
 #if MIN_VERSION_base(4,8,0)
 import Data.Coerce
@@ -86,7 +76,6 @@ data Tree a = Node {
         subForest :: Forest a   -- ^ zero or more child trees
     }
 #ifdef __GLASGOW_HASKELL__
-#if __GLASGOW_HASKELL__ >= 802
   deriving ( Eq
            , Read
            , Show
@@ -94,16 +83,10 @@ data Tree a = Node {
            , Generic  -- ^ @since 0.5.8
            , Generic1 -- ^ @since 0.5.8
            )
-#elif __GLASGOW_HASKELL__ >= 706
-  deriving (Eq, Read, Show, Data, Generic, Generic1)
-#elif __GLASGOW_HASKELL__ >= 702
-  deriving (Eq, Read, Show, Data, Generic)
-#else
-  deriving (Eq, Read, Show, Data)
-#endif
 #else
   deriving (Eq, Read, Show)
 #endif
+
 type Forest a = [Tree a]
 
 #if MIN_VERSION_base(4,9,0)
@@ -204,14 +187,12 @@ instance Foldable Tree where
 instance NFData a => NFData (Tree a) where
     rnf (Node x ts) = rnf x `seq` rnf ts
 
-#if MIN_VERSION_base(4,4,0)
 instance MonadZip Tree where
   mzipWith f (Node a as) (Node b bs)
     = Node (f a b) (mzipWith (mzipWith f) as bs)
 
   munzip (Node (a, b) ts) = (Node a as, Node b bs)
     where (as, bs) = munzip (map munzip ts)
-#endif
 
 -- | Neat 2-dimensional drawing of a tree.
 drawTree :: Tree String -> String
index 3dd7d76..63c5c62 100644 (file)
@@ -51,22 +51,11 @@ import Utils.Containers.Internal.BitUtil (shiftLL, shiftRL, wordSize)
 import Data.Bits ((.|.), (.&.), testBit)
 #if MIN_VERSION_base(4,8,0)
 import Data.Bits (countTrailingZeros)
-#elif MIN_VERSION_base(4,5,0)
+#else
 import Data.Bits (popCount)
 #endif
 
-#if !MIN_VERSION_base(4,5,0)
--- We could almost certainly improve this fall-back (copied straight from the
--- default definition in Data.Bits), but it hardly seems worth the trouble
--- to speed things up on GHC 7.4 and below.
-countTrailingZeros :: Word -> Int
-countTrailingZeros x = go 0
-      where
-        go i | i >= wordSize      = i
-             | testBit x i = i
-             | otherwise   = go (i+1)
-
-#elif !MIN_VERSION_base(4,8,0)
+#if !MIN_VERSION_base(4,8,0)
 countTrailingZeros :: Word -> Int
 countTrailingZeros x = popCount ((x .&. (-x)) - 1)
 {-# INLINE countTrailingZeros #-}
index a8725e2..f1d2c94 100644 (file)
@@ -2,7 +2,7 @@
 #if __GLASGOW_HASKELL__
 {-# LANGUAGE MagicHash #-}
 #endif
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
@@ -39,11 +39,7 @@ module Utils.Containers.Internal.BitUtil
     ) where
 
 import Data.Bits ((.|.), xor)
-#if MIN_VERSION_base(4,5,0)
 import Data.Bits (popCount, unsafeShiftL, unsafeShiftR)
-#else
-import Data.Bits ((.&.), shiftL, shiftR)
-#endif
 #if MIN_VERSION_base(4,7,0)
 import Data.Bits (finiteBitSize)
 #else
@@ -67,13 +63,7 @@ import Data.Word (Word)
 ----------------------------------------------------------------------}
 
 bitcount :: Int -> Word -> Int
-#if MIN_VERSION_base(4,5,0)
 bitcount a x = a + popCount x
-#else
-bitcount a0 x0 = go a0 x0
-  where go a 0 = a
-        go a x = go (a + 1) (x .&. (x-1))
-#endif
 {-# INLINE bitcount #-}
 
 -- The highestBitMask implementation is based on
@@ -97,13 +87,8 @@ highestBitMask x1 = let x2 = x1 .|. x1 `shiftRL` 1
 
 -- Right and left logical shifts.
 shiftRL, shiftLL :: Word -> Int -> Word
-#if MIN_VERSION_base(4,5,0)
 shiftRL = unsafeShiftR
 shiftLL = unsafeShiftL
-#else
-shiftRL = shiftR
-shiftLL = shiftL
-#endif
 
 {-# INLINE wordSize #-}
 wordSize :: Int
index 09b1e83..5c374e8 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE CPP #-}
-#if !defined(TESTING) && __GLASGOW_HASKELL__ >= 703
+#if !defined(TESTING) && defined(__GLASGOW_HASKELL__)
 {-# LANGUAGE Safe #-}
 #endif
 
index 49323ad..8a72e34 100644 (file)
@@ -1,5 +1,40 @@
 # Changelog for [`containers` package](http://github.com/haskell/containers)
 
+## Next
+
+### New functions and class instances
+
+* Add `Data.Containers.ListUtils` offering `nub`-like functions. (Thanks to
+  Gershom Bazerman for starting the process of writing these.)
+
+### Changes to existing functions
+
+* Generalize the types of `unions` and `unionsWith`. (Thanks, jwaldmann.)
+
+### Performance improvements
+
+* Speed up folds and `traverse` on sequences. (Thanks, Donnacha Oisín Kidney.)
+
+* Speed up `Data.Set.union`. (Thanks, Joachim Breitner.)
+
+* Speed up several algorithms in `Data.Graph` a bit by using unboxed arrays
+  where appropriate.
+
+* Implement `Data.Graph.indegree` directly instead of taking the transpose
+  and calculating its `outdegree`. This may not lead to an immediate performance
+  improvement (see [GHC Trac #14785](https://ghc.haskell.org/trac/ghc/ticket/14785))
+  but it should be better eventually.
+
+### Other package changes
+
+* Drop support for GHC versions before 7.6.
+
+* Improve `Data.Graph` documentation, and reorganize map and set documentation.
+
+* Remove the `Data.Map.Lazy.Merge` and `Data.Map.Strict.Merge` modules. These
+  were renamed and deprecated almost as soon as they were introduced.
+
+
 ## 0.5.11
 
 * Released with GHC 8.4.
index 6c966e1..b1cac88 100644 (file)
@@ -40,7 +40,7 @@ source-repository head
     location: http://github.com/haskell/containers.git
 
 Library
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5
     if impl(ghc)
         build-depends: ghc-prim
 
@@ -61,11 +61,9 @@ Library
         Data.IntSet
         Data.Map
         Data.Map.Lazy
-        Data.Map.Lazy.Merge
         Data.Map.Merge.Lazy
         Data.Map.Strict.Internal
         Data.Map.Strict
-        Data.Map.Strict.Merge
         Data.Map.Merge.Strict
         Data.Map.Internal
         Data.Map.Internal.Debug
@@ -100,7 +98,7 @@ benchmark intmap-benchmarks
   main-is: IntMap.hs
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5
@@ -111,7 +109,7 @@ benchmark intset-benchmarks
   main-is: IntSet.hs
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5
@@ -122,7 +120,7 @@ benchmark map-benchmarks
   main-is: Map.hs
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5,
@@ -134,7 +132,7 @@ benchmark sequence-benchmarks
   main-is: Sequence.hs
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5,
@@ -147,7 +145,7 @@ benchmark set-benchmarks
   main-is: Set.hs
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5
@@ -159,7 +157,7 @@ benchmark set-operations-intmap
   other-modules: SetOperations
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3
 
@@ -170,7 +168,7 @@ benchmark set-operations-intset
   other-modules: SetOperations
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3
 
@@ -181,7 +179,7 @@ benchmark set-operations-map
   other-modules: SetOperations
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3
 
@@ -192,7 +190,7 @@ benchmark set-operations-set
   other-modules: SetOperations
   ghc-options: -O2
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3
 
@@ -214,7 +212,7 @@ benchmark lookupge-intmap
   other-modules:
     Data.IntMap.Internal
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5,
@@ -243,7 +241,7 @@ benchmark lookupge-map
   other-modules:
     Data.Map.Internal
   build-depends:
-    base >= 4.2 && < 5,
+    base >= 4.6 && < 5,
     containers,
     criterion >= 0.4.0 && < 1.3,
     deepseq >= 1.1.0.0 && < 1.5,
@@ -275,7 +273,7 @@ Test-suite map-lazy-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -308,7 +306,7 @@ Test-suite map-strict-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING -DSTRICT
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -330,7 +328,7 @@ Test-suite bitqueue-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, ghc-prim
+    build-depends: base >= 4.6 && < 5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -354,7 +352,7 @@ Test-suite set-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -383,7 +381,7 @@ Test-suite intmap-lazy-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -411,7 +409,7 @@ Test-suite intmap-strict-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING -DSTRICT
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -438,7 +436,7 @@ Test-suite intset-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -476,7 +474,7 @@ Test-suite deprecated-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -496,7 +494,7 @@ Test-suite seq-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -515,7 +513,7 @@ Test-suite tree-properties
     type: exitcode-stdio-1.0
     cpp-options: -DTESTING
 
-    build-depends: base >= 4.3 && < 5, array, deepseq >= 1.2 && < 1.5, ghc-prim
+    build-depends: base >= 4.6 && < 5, array >= 0.4.0.0, deepseq >= 1.2 && < 1.5, ghc-prim
     ghc-options: -O2
     other-extensions: CPP, BangPatterns
     include-dirs: include
@@ -544,8 +542,8 @@ test-suite map-strictness-properties
   type: exitcode-stdio-1.0
 
   build-depends:
-    array,
-    base >= 4.3 && < 5,
+    array >= 0.4.0.0,
+    base >= 4.6 && < 5,
     ChasingBottoms,
     deepseq >= 1.2 && < 1.5,
     QuickCheck >= 2.7.1,
@@ -571,8 +569,8 @@ test-suite intmap-strictness-properties
   other-extensions: CPP, BangPatterns
 
   build-depends:
-    array,
-    base >= 4.3 && < 5,
+    array >= 0.4.0.0,
+    base >= 4.6 && < 5,
     ChasingBottoms,
     deepseq >= 1.2 && < 1.5,
     QuickCheck >= 2.7.1,
@@ -595,8 +593,8 @@ test-suite intset-strictness-properties
   other-extensions: CPP, BangPatterns
 
   build-depends:
-    array,
-    base >= 4.3 && < 5,
+    array >= 0.4.0.0,
+    base >= 4.6 && < 5,
     ChasingBottoms,
     deepseq >= 1.2 && < 1.5,
     QuickCheck >= 2.7.1,
@@ -615,7 +613,7 @@ test-suite listutils-properties
   type: exitcode-stdio-1.0
 
   build-depends:
-    base >= 4.3 && < 5,
+    base >= 4.6 && < 5,
     ChasingBottoms,
     deepseq >= 1.2 && < 1.5,
     QuickCheck >= 2.7.1,
index 83cea82..9dae07b 100644 (file)
 #define DEFINE_PATTERN_SYNONYMS 1
 #endif
 
-/*
- * We use cabal-generated MIN_VERSION_base to adapt to changes of base.
- * Nevertheless, as a convenience, we also allow compiling without cabal by
- * defining an approximate MIN_VERSION_base if needed. The alternative version
- * guesses the version of base using the version of GHC. This is usually
- * sufficiently accurate. However, it completely ignores minor version numbers,
- * and it makes the assumption that a pre-release version of GHC will ship with
- * base libraries with the same version numbers as the final release. This
- * assumption is violated in certain stages of GHC development, but in practice
- * this should very rarely matter, and will not affect any released version.
- */
-#ifndef MIN_VERSION_base
-#if __GLASGOW_HASKELL__ >= 709
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=8)))
-#elif __GLASGOW_HASKELL__ >= 707
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=7)))
-#elif __GLASGOW_HASKELL__ >= 705
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=6)))
-#elif __GLASGOW_HASKELL__ >= 703
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=5)))
-#elif __GLASGOW_HASKELL__ >= 701
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=4)))
-#elif __GLASGOW_HASKELL__ >= 700
-#define MIN_VERSION_base(major1,major2,minor) (((major1)<4)||(((major1) == 4)&&((major2)<=3)))
-#else
-#define MIN_VERSION_base(major1,major2,minor) (0)
-#endif
-#endif
-
 #endif
index eecb9eb..c2a7f0a 100644 (file)
@@ -1,10 +1,6 @@
 {-# LANGUAGE CPP #-}
-#if MIN_VERSION_base(4,5,0)
 import Data.Bits ((.&.), popCount)
 import Data.Word (Word)
-#else
-import Data.Bits ((.&.))
-#endif
 import Data.IntSet
 import Data.List (nub,sort)
 import qualified Data.List as List
@@ -72,9 +68,7 @@ main = defaultMain [ testCase "lookupLT" test_lookupLT
                    , testProperty "prop_splitRoot" prop_splitRoot
                    , testProperty "prop_partition" prop_partition
                    , testProperty "prop_filter" prop_filter
-#if MIN_VERSION_base(4,5,0)
                    , testProperty "prop_bitcount" prop_bitcount
-#endif
                    ]
 
 ----------------------------------------------------------------
@@ -397,7 +391,6 @@ prop_filter s i =
      valid evens .&&.
      parts === (odds, evens)
 
-#if MIN_VERSION_base(4,5,0)
 prop_bitcount :: Int -> Word -> Bool
 prop_bitcount a w = bitcount_orig a w == bitcount_new a w
   where
@@ -405,5 +398,3 @@ prop_bitcount a w = bitcount_orig a w == bitcount_new a w
       where go a 0 = a
             go a x = go (a + 1) (x .&. (x-1))
     bitcount_new a x = a + popCount x
-#endif
-
index 86bd74b..7f29ade 100644 (file)
@@ -41,9 +41,7 @@ import Test.QuickCheck.Property
 import Test.QuickCheck.Function
 import Test.Framework
 import Test.Framework.Providers.QuickCheck2
-#if MIN_VERSION_base(4,4,0)
 import Control.Monad.Zip (MonadZip (..))
-#endif
 import Control.DeepSeq (deepseq)
 import Control.Monad.Fix (MonadFix (..))
 
@@ -135,11 +133,9 @@ main = defaultMain
        , testProperty "zipWith3" prop_zipWith3
        , testProperty "zip4" prop_zip4
        , testProperty "zipWith4" prop_zipWith4
-#if MIN_VERSION_base(4,4,0)
        , testProperty "mzip-naturality" prop_mzipNaturality
        , testProperty "mzip-preservation" prop_mzipPreservation
        , testProperty "munzip-lazy" prop_munzipLazy
-#endif
        , testProperty "<*>" prop_ap
        , testProperty "<*> NOINLINE" prop_ap_NOINLINE
        , testProperty "liftA2" prop_liftA2
@@ -790,7 +786,6 @@ prop_zipWith4 xs ys zs ts =
     toList' (zipWith4 f xs ys zs ts) ~= Data.List.zipWith4 f (toList xs) (toList ys) (toList zs) (toList ts)
   where f = (,,,)
 
-#if MIN_VERSION_base(4,4,0)
 -- This comes straight from the MonadZip documentation
 prop_mzipNaturality :: Fun A C -> Fun B D -> Seq A -> Seq B -> Property
 prop_mzipNaturality f g sa sb =
@@ -817,7 +812,6 @@ prop_munzipLazy pairs = deepseq ((`seq` ()) <$> repaired) True
     firstPieces = fmap (fst . munzip) partialpairs
     repaired = mapWithIndex (\i s -> update i 10000 s) firstPieces
     err = error "munzip isn't lazy enough"
-#endif
 
 -- Applicative operations
 
index 5e406df..0ba42d9 100644 (file)
@@ -49,9 +49,7 @@ instance Arbitrary a => Arbitrary (Tree a) where
         (st, tl) <- go (n - sh)
         pure (sh + st, hd : tl)
 
--- genericShrink only became available when generics did, so it's
--- not available under GHC 7.0.
-#if __GLASGOW_HASKELL__ >= 704
+#if defined(__GLASGOW_HASKELL__)
   shrink = genericShrink
 #endif