diff options
Diffstat (limited to 'libraries/base/Data')
-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 |