base-compat-batteries 0.12.3 → 0.13.0
raw patch · 19 files changed
+234/−122 lines, 19 filesdep +bifunctor-classes-compatdep +foldable1-classes-compatdep −bifunctorsdep ~OneTupledep ~base-compatPVP ok
version bump matches the API change (PVP)
Dependencies added: bifunctor-classes-compat, foldable1-classes-compat
Dependencies removed: bifunctors
Dependency ranges changed: OneTuple, base-compat
API changes (from Hackage documentation)
+ Data.List.NonEmpty.Compat: inits1 :: NonEmpty a -> NonEmpty (NonEmpty a)
+ Data.List.NonEmpty.Compat: tails1 :: NonEmpty a -> NonEmpty (NonEmpty a)
+ Data.Tuple.Compat: pattern MkSolo :: a -> Solo a
+ Numeric.Natural.Compat: minusNaturalMaybe :: Natural -> Natural -> Maybe Natural
Files
- CHANGES.markdown +14/−2
- base-compat-batteries.cabal +15/−33
- src/Data/Bifoldable/Compat.hs +1/−1
- src/Data/Bifoldable1/Compat.hs +10/−0
- src/Data/Bifoldable1/Compat/Repl/Batteries.hs +8/−0
- src/Data/Bifunctor/Compat.hs +1/−1
- src/Data/Bitraversable/Compat.hs +1/−1
- src/Data/Foldable1/Compat.hs +10/−0
- src/Data/Foldable1/Compat/Repl/Batteries.hs +8/−0
- src/Data/List/NonEmpty/Compat.hs +99/−55
- src/Data/Traversable/Compat.hs +6/−0
- src/Data/Traversable/Compat/Repl/Batteries.hs +8/−0
- src/Data/Tuple/Compat.hs +17/−10
- src/Data/Typeable/Compat.hs +6/−0
- src/Data/Typeable/Compat/Repl/Batteries.hs +8/−0
- src/Numeric/Natural/Compat.hs +14/−0
- test/SafeHaskellSpec.hs +4/−0
- test/System/Environment/CompatSpec.hs +4/−4
- test/T91Spec.hs +0/−15
CHANGES.markdown view
@@ -1,5 +1,17 @@-## Changes in 0.12.3 [2023.07.12]- - Allow building with `OneTuple-0.4.*`.+## Changes in 0.13.0 [2023.03.10]+ - This coincides with the `base-compat-0.13.0` release. Refer to the+ [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0130-20230310)+ for more details.+ - Require `OneTuple-0.4` or later on GHC 7.4+, as that is the first `OneTuple`+ release to backport the `MkSolo` data constuctor for `Solo`. See+ `Data.Tuple.Compat`.+ - Introduce `Data.Foldable1.Compat` and `Data.Bifoldable1.Compat` modules,+ which correspond to changes made in `base-4.18.0.0`. `base-compat-batteries`+ uses the `foldable1-classes-compat` library to backport this code to older+ versions of `base`.+ - Depend on `bifunctor-classes-compat` to backport the `Bifunctor`,+ `Bifoldable`, and `Bitraversable` classes instead of the+ `bifunctors` library, which has more dependencies. ## Changes in 0.12.2 [2022.08.11] - This coincides with the `base-compat-0.12.2` release. Refer to the
base-compat-batteries.cabal view
@@ -1,5 +1,5 @@ name: base-compat-batteries-version: 0.12.3+version: 0.13.0 license: MIT license-file: LICENSE copyright: (c) 2012-2018 Simon Hengel,@@ -35,22 +35,6 @@ for a more comprehensive list of differences between @base-compat@ and @base-compat-batteries@. extra-source-files: CHANGES.markdown, README.markdown-tested-with: GHC == 7.0.4- , GHC == 7.2.2- , GHC == 7.4.2- , GHC == 7.6.3- , GHC == 7.8.4- , GHC == 7.10.3- , GHC == 8.0.2- , GHC == 8.2.2- , GHC == 8.4.4- , GHC == 8.6.5- , GHC == 8.8.4- , GHC == 8.10.7- , GHC == 9.0.2- , GHC == 9.2.7- , GHC == 9.4.5- , GHC == 9.6.2 source-repository head type: git@@ -64,7 +48,7 @@ Haskell2010 build-depends: base >= 4.3 && < 5,- base-compat == 0.12.3,+ base-compat == 0.13.0, ghc-prim if !impl(ghc >= 7.8) build-depends:@@ -81,24 +65,15 @@ transformers-compat >= 0.6 && < 0.8 if !impl(ghc >= 8.2) build-depends:- bifunctors >= 5.5.2 && < 5.6,- type-equality >= 1 && < 1.1+ bifunctor-classes-compat >= 0.1 && < 0.2,+ type-equality >= 1 && < 1.1 if !impl(ghc >= 8.6) build-depends: contravariant >= 1.5 && < 1.6- if !impl(ghc >= 9.0)+ if !impl(ghc >= 9.6) build-depends:- OneTuple >= 0.3 && < 0.5-- -- We want to consistently use `Solo` as the name of the data constructor- -- for the base-compat-0.12.* series when building with a pre-9.6 version- -- of GHC. This is only possible on pre-7.8 versions of GHC (which do not- -- support pattern synonyms) with OneTuple-0.3.*, which defines a `Solo`- -- data constructor. (In OneTuple-0.4.* and later, the data constructor is- -- instead named `MkSolo`.)- if !impl(ghc >= 7.8)- build-depends:- OneTuple == 0.3.*+ foldable1-classes-compat >= 0.1 && < 0.2,+ OneTuple >= 0.4 && < 0.5 ghc-options: -fno-warn-duplicate-exports if impl(ghc >= 7.10)@@ -117,6 +92,7 @@ Control.Monad.ST.Lazy.Unsafe.Compat Control.Monad.ST.Unsafe.Compat Data.Bifoldable.Compat+ Data.Bifoldable1.Compat Data.Bifunctor.Compat Data.Bitraversable.Compat Data.Bits.Compat@@ -124,6 +100,7 @@ Data.Complex.Compat Data.Either.Compat Data.Foldable.Compat+ Data.Foldable1.Compat Data.Function.Compat Data.Functor.Compat Data.Functor.Compose.Compat@@ -141,7 +118,9 @@ Data.Semigroup.Compat Data.STRef.Compat Data.String.Compat+ Data.Traversable.Compat Data.Tuple.Compat+ Data.Typeable.Compat Data.Type.Coercion.Compat Data.Type.Equality.Compat Data.Version.Compat@@ -179,6 +158,7 @@ Control.Monad.ST.Lazy.Unsafe.Compat.Repl.Batteries Control.Monad.ST.Unsafe.Compat.Repl.Batteries Data.Bifoldable.Compat.Repl.Batteries+ Data.Bifoldable1.Compat.Repl.Batteries Data.Bifunctor.Compat.Repl.Batteries Data.Bitraversable.Compat.Repl.Batteries Data.Bits.Compat.Repl.Batteries@@ -186,6 +166,7 @@ Data.Complex.Compat.Repl.Batteries Data.Either.Compat.Repl.Batteries Data.Foldable.Compat.Repl.Batteries+ Data.Foldable1.Compat.Repl.Batteries Data.Function.Compat.Repl.Batteries Data.Functor.Compat.Repl.Batteries Data.Functor.Compose.Compat.Repl.Batteries@@ -203,7 +184,9 @@ Data.Semigroup.Compat.Repl.Batteries Data.STRef.Compat.Repl.Batteries Data.String.Compat.Repl.Batteries+ Data.Traversable.Compat.Repl.Batteries Data.Tuple.Compat.Repl.Batteries+ Data.Typeable.Compat.Repl.Batteries Data.Type.Coercion.Compat.Repl.Batteries Data.Type.Equality.Compat.Repl.Batteries Data.Version.Compat.Repl.Batteries@@ -266,7 +249,6 @@ -- Other tests SafeHaskellSpec TestHspecTrustworthy- T91Spec build-depends: base >= 4.3 && < 5 , base-compat-batteries
src/Data/Bifoldable/Compat.hs view
@@ -6,5 +6,5 @@ #if MIN_VERSION_base(4,10,0) import "base-compat" Data.Bifoldable.Compat as Base #else-import "bifunctors" Data.Bifoldable as Base+import "bifunctor-classes-compat" Data.Bifoldable as Base #endif
+ src/Data/Bifoldable1/Compat.hs view
@@ -0,0 +1,10 @@+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}+module Data.Bifoldable1.Compat (+ module Base+) where++#if MIN_VERSION_base(4,18,0)+import "base-compat" Data.Bifoldable1.Compat as Base+#else+import "foldable1-classes-compat" Data.Bifoldable1 as Base+#endif
+ src/Data/Bifoldable1/Compat/Repl/Batteries.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE PackageImports #-}+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}+-- | Reexports "Data.Bifoldable1.Compat"+-- from a globally unique namespace.+module Data.Bifoldable1.Compat.Repl.Batteries (+ module Data.Bifoldable1.Compat+) where+import "this" Data.Bifoldable1.Compat
src/Data/Bifunctor/Compat.hs view
@@ -6,5 +6,5 @@ #if MIN_VERSION_base(4,8,0) import "base-compat" Data.Bifunctor.Compat as Base #else-import "bifunctors" Data.Bifunctor as Base+import "bifunctor-classes-compat" Data.Bifunctor as Base #endif
src/Data/Bitraversable/Compat.hs view
@@ -6,5 +6,5 @@ #if MIN_VERSION_base(4,10,0) import "base-compat" Data.Bitraversable.Compat as Base #else-import "bifunctors" Data.Bitraversable as Base+import "bifunctor-classes-compat" Data.Bitraversable as Base #endif
+ src/Data/Foldable1/Compat.hs view
@@ -0,0 +1,10 @@+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}+module Data.Foldable1.Compat (+ module Base+) where++#if MIN_VERSION_base(4,18,0)+import "base-compat" Data.Foldable1.Compat as Base+#else+import "foldable1-classes-compat" Data.Foldable1 as Base+#endif
+ src/Data/Foldable1/Compat/Repl/Batteries.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE PackageImports #-}+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}+-- | Reexports "Data.Foldable1.Compat"+-- from a globally unique namespace.+module Data.Foldable1.Compat.Repl.Batteries (+ module Data.Foldable1.Compat+) where+import "this" Data.Foldable1.Compat
src/Data/List/NonEmpty/Compat.hs view
@@ -4,76 +4,84 @@ NonEmpty(..) -- * Non-empty stream transformations- , map - , intersperse - , scanl - , scanr - , scanl1 - , scanr1 - , transpose - , sortBy - , sortWith + , map+ , intersperse+ , scanl+ , scanr+ , scanl1+ , scanr1+ , transpose+ , sortBy+ , sortWith -- * Basic functions- , length - , head - , tail - , last - , init + , length+ , head+ , tail+ , last+ , init , singleton- , (<|), cons - , uncons - , unfoldr - , sort - , reverse - , inits - , tails + , (<|), cons+ , uncons+ , unfoldr+ , sort+ , reverse+ , inits+ , inits1+ , tails+ , tails1 -- * Building streams- , iterate - , repeat - , cycle - , unfold - , insert - , some1 + , iterate+ , repeat+ , cycle+ , unfold+ , insert+ , some1 -- * Extracting sublists- , take - , drop - , splitAt - , takeWhile - , dropWhile - , span - , break - , filter - , partition - , group - , groupBy - , groupWith - , groupAllWith - , group1 - , groupBy1 - , groupWith1 - , groupAllWith1 + , take+ , drop+ , splitAt+ , takeWhile+ , dropWhile+ , span+ , break+ , filter+ , partition+ , group+ , groupBy+ , groupWith+ , groupAllWith+ , group1+ , groupBy1+ , groupWith1+ , groupAllWith1 -- * Sublist predicates- , isPrefixOf + , isPrefixOf -- * \"Set\" operations- , nub - , nubBy + , nub+ , nubBy -- * Indexing streams- , (!!) + , (!!) -- * Zipping and unzipping streams- , zip - , zipWith - , unzip + , zip+ , zipWith+ , unzip -- * Converting to and from a list- , fromList - , toList - , nonEmpty - , xor + , fromList+ , toList+ , nonEmpty+ , xor ) where #if MIN_VERSION_base(4,9,0) import "base-compat" Data.List.NonEmpty.Compat #else import "semigroups" Data.List.NonEmpty++import qualified "this" Prelude.Compat as Prelude+import "this" Prelude.Compat ((.))++import qualified "this" Data.Foldable.Compat as Foldable+import qualified "this" Data.List.Compat as List #endif #if !(MIN_VERSION_base(4,9,0))@@ -82,4 +90,40 @@ -- /Since: 4.15/ singleton :: a -> NonEmpty a singleton a = a :| []++-- | The 'inits1' function takes a 'NonEmpty' stream @xs@ and returns all the+-- 'NonEmpty' finite prefixes of @xs@, starting with the shortest.+--+-- > inits1 (1 :| [2,3]) == (1 :| []) :| [1 :| [2], 1 :| [2,3]]+-- > inits1 (1 :| []) == (1 :| []) :| []+--+-- /Since: 4.18/+inits1 :: NonEmpty a -> NonEmpty (NonEmpty a)+inits1 =+ -- fromList is an unsafe function, but this usage should be safe, since:+ -- - `inits xs = [[], ..., init (init xs), init xs, xs]`+ -- - If `xs` is nonempty, it follows that `inits xs` contains at least one nonempty+ -- list, since `last (inits xs) = xs`.+ -- - The only empty element of `inits xs` is the first one (by the definition of `inits`)+ -- - Therefore, if we take all but the first element of `inits xs` i.e.+ -- `tail (inits xs)`, we have a nonempty list of nonempty lists+ fromList . Prelude.map fromList . List.tail . List.inits . Foldable.toList++-- | The 'tails1' function takes a 'NonEmpty' stream @xs@ and returns all the+-- non-empty suffixes of @xs@, starting with the longest.+--+-- > tails1 (1 :| [2,3]) == (1 :| [2,3]) :| [2 :| [3], 3 :| []]+-- > tails1 (1 :| []) == (1 :| []) :| []+--+-- /Since: 4.18/+tails1 :: NonEmpty a -> NonEmpty (NonEmpty a)+tails1 =+ -- fromList is an unsafe function, but this usage should be safe, since:+ -- - `tails xs = [xs, tail xs, tail (tail xs), ..., []]`+ -- - If `xs` is nonempty, it follows that `tails xs` contains at least one nonempty+ -- list, since `head (tails xs) = xs`.+ -- - The only empty element of `tails xs` is the last one (by the definition of `tails`)+ -- - Therefore, if we take all but the last element of `tails xs` i.e.+ -- `init (tails xs)`, we have a nonempty list of nonempty lists+ fromList . Prelude.map fromList . List.init . List.tails . Foldable.toList #endif
+ src/Data/Traversable/Compat.hs view
@@ -0,0 +1,6 @@+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}+module Data.Traversable.Compat (+ module Base+) where++import "base-compat" Data.Traversable.Compat as Base
+ src/Data/Traversable/Compat/Repl/Batteries.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE PackageImports #-}+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}+-- | Reexports "Data.Traversable.Compat"+-- from a globally unique namespace.+module Data.Traversable.Compat.Repl.Batteries (+ module Data.Traversable.Compat+) where+import "this" Data.Traversable.Compat
src/Data/Tuple/Compat.hs view
@@ -2,21 +2,25 @@ #if __GLASGOW_HASKELL__ >= 708 {-# LANGUAGE PatternSynonyms #-} #endif+-- | This uses the @OneTuple@ compatibility library to backport 'Solo' to old+-- versions of GHC. Note that @OneTuple@ makes use of pattern synonyms, which+-- cannot be defined on pre-7.8 versions of GHC. As such, it is not feasible+-- to backport the @Solo@ data constructor on pre-7.8 versions of GHC, as+-- @OneTuple@ defines this as a pattern synonym. module Data.Tuple.Compat ( #if MIN_VERSION_ghc_prim(0,10,0) Solo(MkSolo, Solo)-#elif __GLASGOW_HASKELL__ >= 708 && \- __GLASGOW_HASKELL__ < 800 && \- defined(MIN_VERSION_OneTuple)-# if MIN_VERSION_OneTuple(0,4,0)- Solo- , pattern Solo-# else+#elif MIN_VERSION_ghc_prim(0,7,0) Solo(Solo)-# endif+ , pattern MkSolo+#elif __GLASGOW_HASKELL__ >= 800+ Solo(MkSolo, Solo)+#elif __GLASGOW_HASKELL__ >= 708+ Solo(MkSolo)+ , pattern Solo #else- Solo(Solo)+ Solo(MkSolo) #endif , fst , snd@@ -25,8 +29,11 @@ , swap ) where -#if MIN_VERSION_ghc_prim(0,7,0)+#if MIN_VERSION_ghc_prim(0,10,0) import "base-compat" Data.Tuple.Compat+#elif MIN_VERSION_ghc_prim(0,7,0)+import "base-compat" Data.Tuple.Compat+import "OneTuple" Data.Tuple.Solo (pattern MkSolo) #else import "base" Data.Tuple import "OneTuple" Data.Tuple.Solo
+ src/Data/Typeable/Compat.hs view
@@ -0,0 +1,6 @@+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}+module Data.Typeable.Compat (+ module Base+) where++import "base-compat" Data.Typeable.Compat as Base
+ src/Data/Typeable/Compat/Repl/Batteries.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE PackageImports #-}+{-# OPTIONS_GHC -fno-warn-dodgy-exports -fno-warn-unused-imports #-}+-- | Reexports "Data.Typeable.Compat"+-- from a globally unique namespace.+module Data.Typeable.Compat.Repl.Batteries (+ module Data.Typeable.Compat+) where+import "this" Data.Typeable.Compat
src/Numeric/Natural/Compat.hs view
@@ -1,10 +1,24 @@ {-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}+#if __GLASGOW_HASKELL__ >= 702+{-# LANGUAGE Trustworthy #-}+#endif module Numeric.Natural.Compat ( module Base+, minusNaturalMaybe ) where #if MIN_VERSION_base(4,8,0) import "base-compat" Numeric.Natural.Compat as Base #else import "nats" Numeric.Natural as Base++import "this" Prelude.Compat++-- | 'Natural' subtraction. Returns 'Nothing's for non-positive results.+--+-- /Since: 4.18.0.0/+minusNaturalMaybe :: Natural -> Natural -> Maybe Natural+minusNaturalMaybe x y+ | x < y = Nothing+ | otherwise = Just (x - y) #endif
test/SafeHaskellSpec.hs view
@@ -14,6 +14,7 @@ import Control.Monad.Fail.Compat () import Control.Monad.IO.Class.Compat () import Data.Bifoldable.Compat ()+import Data.Bifoldable1.Compat () import Data.Bifunctor.Compat () import Data.Bitraversable.Compat () import Data.Bits.Compat ()@@ -21,6 +22,7 @@ import Data.Complex.Compat () import Data.Either.Compat () import Data.Foldable.Compat ()+import Data.Foldable1.Compat () import Data.Function.Compat () import Data.Functor.Compat () import Data.Functor.Compose.Compat ()@@ -38,7 +40,9 @@ import Data.Semigroup.Compat () import Data.STRef.Compat () import Data.String.Compat ()+import Data.Traversable.Compat () import Data.Tuple.Compat ()+import Data.Typeable.Compat () import Data.Type.Coercion.Compat () import Data.Type.Equality.Compat () import Data.Version.Compat ()
test/System/Environment/CompatSpec.hs view
@@ -2,7 +2,7 @@ module System.Environment.CompatSpec (main, spec) where import Test.Hspec-#if __GLASGOW_HASKELL__ >= 704+#if __GLASGOW_HASKELL__ >= 702 import Test.QuickCheck #endif @@ -56,7 +56,7 @@ it "throws an exception if key contains '='" $ do unsetEnv "some=key" `shouldThrow` (== InvalidArgument) . ioeGetErrorType -#if __GLASGOW_HASKELL__ >= 704+#if __GLASGOW_HASKELL__ >= 702 it "works for arbitrary keys" $ property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do setEnv k "foo"@@ -96,7 +96,7 @@ setEnv "FOO\NULBAR" "foo" getEnv "FOO" `shouldReturn` "foo" -#if __GLASGOW_HASKELL__ >= 704+#if __GLASGOW_HASKELL__ >= 702 it "works for unicode" $ do unsetEnv "FOO" setEnv "FOO" "foo-\955-bar"@@ -118,7 +118,7 @@ it "throws an exception if key contains '='" $ do setEnv "some=key" "foo" `shouldThrow` (== InvalidArgument) . ioeGetErrorType -#if __GLASGOW_HASKELL__ >= 704+#if __GLASGOW_HASKELL__ >= 702 it "works for arbitrary keys" $ property $ \k -> ('\NUL' `notElem` k && '=' `notElem` k && (not . null) k) ==> do setEnv k "foo"
− test/T91Spec.hs
@@ -1,15 +0,0 @@-{-# OPTIONS_GHC -fno-warn-deprecations #-}--- | A regression test for https://github.com/haskell-compat/base-compat/issues/91.-module T91Spec (main, spec) where--import Data.Tuple.Compat-import Test.Hspec (Expectation, Spec, describe, hspec, it)--main :: IO ()-main = hspec spec--spec :: Spec-spec =- describe "Solo data constructor" $- it "is always available" $ do- Solo () `seq` return () :: Expectation