diff options
author | Armando Ramirez <armando.m.ramirez@gmail.com> | 2022-09-14 18:17:12 -0700 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-03-23 09:19:32 -0400 |
commit | 8c98deba9a0b8136f858ecc5d7a6948dcf60820e (patch) | |
tree | f4770750900788dda4abb0e43271cdf715588129 /libraries | |
parent | 30d45e971d94b3c28296a3f20f94275f38bc89d1 (diff) | |
download | haskell-8c98deba9a0b8136f858ecc5d7a6948dcf60820e.tar.gz |
Optimized Foldable methods for Data.Functor.Compose
Explicitly define length, elem, etc. in Foldable instance for Data.Functor.Compose
Implementation of https://github.com/haskell/core-libraries-committee/issues/57
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/base/Data/Functor/Compose.hs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libraries/base/Data/Functor/Compose.hs b/libraries/base/Data/Functor/Compose.hs index 53bb53c234..b030e3511e 100644 --- a/libraries/base/Data/Functor/Compose.hs +++ b/libraries/base/Data/Functor/Compose.hs @@ -31,6 +31,8 @@ import Data.Functor.Classes import Control.Applicative import Data.Coerce (coerce) import Data.Data (Data) +import Data.Foldable (foldMap') +import Data.Monoid (Sum(..), Any(..), Product(..)) import Data.Type.Equality (TestEquality(..), (:~:)(..)) import GHC.Generics (Generic, Generic1) import Text.Read (Read(..), ReadPrec, readListDefault, readListPrecDefault) @@ -113,6 +115,11 @@ instance (Functor f, Functor g) => Functor (Compose f g) where instance (Foldable f, Foldable g) => Foldable (Compose f g) where foldMap f (Compose t) = foldMap (foldMap f) t + length (Compose t) = getSum (foldMap' (Sum . length) t) + elem x (Compose t) = getAny (foldMap' (Any . elem x) t) + sum (Compose t) = getSum (foldMap' (Sum . sum) t) + product (Compose t) = getProduct (foldMap' (Product . product) t) + -- | @since 4.9.0.0 instance (Traversable f, Traversable g) => Traversable (Compose f g) where traverse f (Compose t) = Compose <$> traverse (traverse f) t |