foldable1-classes-compat 0.1 → 0.1.1
raw patch · 5 files changed
+28/−104 lines, 5 filesdep +tasty-benchdep −criteriondep −generic-derivingdep −semigroupsdep ~QuickCheckdep ~basedep ~containers
Dependencies added: tasty-bench
Dependencies removed: criterion, generic-deriving, semigroups, transformers-compat
Dependency ranges changed: QuickCheck, base, containers, ghc-prim
Files
- CHANGELOG.markdown +4/−0
- bench/Bench.hs +1/−1
- foldable1-classes-compat.cabal +15/−50
- src/Data/Bifoldable1.hs +1/−6
- src/Data/Foldable1.hs +7/−47
CHANGELOG.markdown view
@@ -1,5 +1,9 @@ # Revision history for foldable1-classes-compat +## 0.1.1 -- 2024-12-05++* Drop support for pre-8.0 versions of GHC.+ ## 0.1 -- 2023-02-24 * Backport the `Foldable1` and `Bifoldable1` type classes that were introduced
bench/Bench.hs view
@@ -13,11 +13,11 @@ import Prelude hiding (foldl1, head, last, maximum) import Control.DeepSeq (NFData (..))-import Criterion.Main import qualified Data.Foldable as F (Foldable) import Data.Foldable1 import Data.List.NonEmpty (NonEmpty (..)) import Data.Semigroup (Min (..))+import Test.Tasty.Bench #if HAS_FOLDABLE1_CONTAINERS import Data.Tree (Tree (..))
foldable1-classes-compat.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: foldable1-classes-compat-version: 0.1+version: 0.1.1 synopsis: Compatibility package for the Foldable1 and Bifoldable1 type classes @@ -25,22 +25,19 @@ CHANGELOG.markdown README.markdown tested-with:- GHC ==7.0.4- || ==7.2.2- || ==7.4.2- || ==7.6.3- || ==7.8.4- || ==7.10.3- || ==8.0.2+ GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2- || ==9.2.5- || ==9.4.4- || ==9.6.1+ || ==9.2.8+ || ==9.4.8+ || ==9.6.6+ || ==9.8.4+ || ==9.10.1+ || ==9.12.1 -- , GHCJS ==8.4 @@ -60,39 +57,28 @@ library default-language: Haskell2010 ghc-options: -Wall- build-depends: base >=4.3 && <4.19+ build-depends: base >=4.9 && <4.22 if !impl(ghc >= 9.6) hs-source-dirs: src build-depends:- containers >=0.4 && <0.7+ containers >=0.4 && <0.8 , transformers >=0.3 && <0.7 exposed-modules: Data.Foldable1 Data.Bifoldable1 if !impl(ghc >=8.6)- build-depends: base-orphans >=0.8.1 && <0.9+ build-depends: base-orphans >=0.8.1 && <0.10 if !impl(ghc >=8.2) build-depends: bifunctor-classes-compat >=0.1 && <0.2 - if !impl(ghc >=8.0)- build-depends:- semigroups >=0.18.5 && <0.20- , transformers-compat >=0.6 && <0.8-- if !impl(ghc >= 7.2)- build-depends: generic-deriving >=1.14 && <1.15- if flag(tagged) build-depends: tagged >=0.4.4 && <1 if impl(ghc >= 9.0)- build-depends: ghc-prim >= 0.7 && <0.11- else- if !impl(ghc >=7.6)- build-depends: ghc-prim+ build-depends: ghc-prim >= 0.7 && <0.14 test-suite test default-language: Haskell2010@@ -101,23 +87,12 @@ hs-source-dirs: test main-is: Tests.hs - -- because of quickcheck-instances- if !impl(ghc >=7.4)- buildable: False- build-depends: base , containers , foldable1-classes-compat , transformers-- if !impl(ghc >=8.0)- build-depends:- semigroups- , transformers-compat-- build-depends:- QuickCheck >=2.13.2 && <2.15+ , QuickCheck >=2.13.2 && <2.16 , quickcheck-instances >=0.3.27 && <0.4 , test-framework >=0.8.2.0 && <0.9 , test-framework-quickcheck2 >=0.3.0.5 && <0.4@@ -129,20 +104,10 @@ hs-source-dirs: bench main-is: Bench.hs - if !impl(ghc >=7.6)- buildable: False- build-depends: base , containers , foldable1-classes-compat , transformers-- if !impl(ghc >=8.0)- build-depends:- semigroups- , transformers-compat-- build-depends:- criterion >=1.5.6.1 && <1.7- , deepseq >=1.3 && <1.5+ , tasty-bench >=0.3.5 && < 0.4+ , deepseq >=1.3 && <1.6
src/Data/Bifoldable1.hs view
@@ -1,12 +1,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE TypeOperators #-}--#if __GLASGOW_HASKELL__ >= 708 {-# LANGUAGE Safe #-}-#elif __GLASGOW_HASKELL__ >= 702-{-# LANGUAGE Trustworthy #-}-#endif+{-# LANGUAGE TypeOperators #-} module Data.Bifoldable1 where import Control.Applicative (Const (..))
src/Data/Foldable1.hs view
@@ -3,17 +3,11 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeOperators #-}--#if __GLASGOW_HASKELL__ >=706-{-# LANGUAGE PolyKinds #-}-#endif--#if __GLASGOW_HASKELL__ >=702 {-# LANGUAGE Trustworthy #-}-#endif+{-# LANGUAGE TypeOperators #-} -- | A class of non-empty data structures that can be folded to a summary value. module Data.Foldable1 (@@ -29,34 +23,23 @@ minimumBy, ) where +import Data.Coerce (Coercible, coerce)+import Data.Complex (Complex (..)) import Data.Foldable (Foldable, foldlM, foldr) import Data.List (foldl, foldl') import Data.List.NonEmpty (NonEmpty (..))+import Data.Ord (Down (..)) import Data.Semigroup (Dual (..), First (..), Last (..), Max (..), Min (..), Product (..), Semigroup (..), Sum (..))+import GHC.Generics+ (M1 (..), Par1 (..), Rec1 (..), V1, (:*:) (..), (:+:) (..), (:.:) (..)) import Prelude (Maybe (..), Monad (..), Ord, Ordering (..), id, seq, ($!), ($), (.), (=<<), flip, const, error) import qualified Data.List.NonEmpty as NE--#if MIN_VERSION_base(4,4,0)-import Data.Complex (Complex (..))-import GHC.Generics- (M1 (..), Par1 (..), Rec1 (..), V1, (:*:) (..), (:+:) (..), (:.:) (..))-#else-import Generics.Deriving- (M1 (..), Par1 (..), Rec1 (..), V1, (:*:) (..), (:+:) (..), (:.:) (..))-#endif--#if MIN_VERSION_base(4,6,0)-import Data.Ord (Down (..))-#endif--#if MIN_VERSION_base(4,8,0) import qualified Data.Monoid as Mon-#endif #if !MIN_VERSION_base(4,12,0) import Data.Orphans ()@@ -84,13 +67,6 @@ import qualified Data.Functor.Product as Functor import qualified Data.Functor.Sum as Functor --- coerce-#if __GLASGOW_HASKELL__ <708-import Unsafe.Coerce (unsafeCoerce)-#else-import Data.Coerce (Coercible, coerce)-#endif- -- $setup -- >>> import Prelude hiding (foldr1, foldl1, head, last, minimum, maximum) @@ -100,9 +76,7 @@ -- | Non-empty data structures that can be folded. class Foldable t => Foldable1 t where-#if __GLASGOW_HASKELL__ >= 708 {-# MINIMAL foldMap1 | foldrMap1 #-}-#endif -- At some point during design it was possible to define this class using -- only 'toNonEmpty'. But it seems a bad idea in general.@@ -415,17 +389,13 @@ head = NE.head last = NE.last -#if MIN_VERSION_base(4,6,0) instance Foldable1 Down where foldMap1 = coerce-#endif -#if MIN_VERSION_base(4,4,0) instance Foldable1 Complex where foldMap1 f (x :+ y) = f x <> f y toNonEmpty (x :+ y) = x :| y : []-#endif ------------------------------------------------------------------------------- -- Instances for tuples@@ -466,9 +436,7 @@ instance Foldable1 Last where foldMap1 = coerce -#if MIN_VERSION_base(4,8,0) deriving instance (Foldable1 f) => Foldable1 (Mon.Alt f)-#endif #if MIN_VERSION_base(4,12,0) deriving instance (Foldable1 f) => Foldable1 (Mon.Ap f)@@ -641,13 +609,5 @@ -- coerce shim ------------------------------------------------------------------------------- -#if __GLASGOW_HASKELL__ <708-coerce :: a -> b-coerce = unsafeCoerce--(#.) :: (b -> c) -> (a -> b) -> a -> c-(#.) _f = coerce-#else (#.) :: Coercible b c => (b -> c) -> (a -> b) -> a -> c (#.) _f = coerce-#endif