base-4.13.0.0: Basic libraries

Data.Monoid

Description

A type a is a Monoid if it provides an associative function (<>) that lets you combine any two values of type a into one, and a neutral element (mempty) such that

a <> mempty == mempty <> a == a

A Monoid is a Semigroup with the added requirement of a neutral element. Thus any Monoid is a Semigroup, but not the other way around.

#### Examples

Expand

The Sum monoid is defined by the numerical addition operator and 0 as neutral element:

>>> mempty :: Sum Int
Sum 0
>>> Sum 1 <> Sum 2 <> Sum 3 <> Sum 4 :: Sum Int
Sum {getSum = 10}


We can combine multiple values in a list into a single value using the mconcat function. Note that we have to specify the type here since Int is a monoid under several different operations:

>>> mconcat [1,2,3,4] :: Sum Int
Sum {getSum = 10}
>>> mconcat [] :: Sum Int
Sum {getSum = 0}


Another valid monoid instance of Int is Product It is defined by multiplication and 1 as neutral element:

>>> Product 1 <> Product 2 <> Product 3 <> Product 4 :: Product Int
Product {getProduct = 24}
>>> mconcat [1,2,3,4] :: Product Int
Product {getProduct = 24}
>>> mconcat [] :: Product Int
Product {getProduct = 1}

Synopsis

# Monoid typeclass

class Semigroup a => Monoid a where Source #

The class of monoids (types with an associative binary operation that has an identity). Instances should satisfy the following:

Right identity
x <> mempty = x
Left identity
mempty <> x = x
Associativity
x <> (y <> z) = (x <> y) <> z (Semigroup law)
Concatenation
mconcat = foldr (<>) mempty

The method names refer to the monoid of lists under concatenation, but there are many other instances.

Some types can be viewed as a monoid in more than one way, e.g. both addition and multiplication on numbers. In such cases we often define newtypes and make those instances of Monoid, e.g. Sum and Product.

NOTE: Semigroup is a superclass of Monoid since base-4.11.0.0.

Minimal complete definition

mempty

Methods

mempty :: a Source #

Identity of mappend

mappend :: a -> a -> a Source #

An associative operation

NOTE: This method is redundant and has the default implementation mappend = (<>) since base-4.11.0.0.

mconcat :: [a] -> a Source #

Fold a list using the monoid.

For most types, the default definition for mconcat will be used, but the function is included in the class definition so that an optimized version can be provided for specific types.

#### Instances

Instances details
 # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmconcat :: [Ordering] -> Ordering Source # Monoid () # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: () Source #mappend :: () -> () -> () Source #mconcat :: [()] -> () Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Any -> Any -> Any Source #mconcat :: [Any] -> Any Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: All -> All -> All Source #mconcat :: [All] -> All Source # # mappend takes the longer of two lifetimes.Since: base-4.8.0.0 Instance detailsDefined in GHC.Event.Internal Methodsmconcat :: [Lifetime] -> Lifetime Source # # Since: base-4.4.0.0 Instance detailsDefined in GHC.Event.Internal Methodsmconcat :: [Event] -> Event Source # Monoid [a] # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: [a] Source #mappend :: [a] -> [a] -> [a] Source #mconcat :: [[a]] -> [a] Source # Semigroup a => Monoid (Maybe a) # Lift a semigroup into Maybe forming a Monoid according to http://en.wikipedia.org/wiki/Monoid: "Any semigroup S may be turned into a monoid simply by adjoining an element e not in S and defining e*e = e and e*s = s = s*e for all s ∈ S."Since 4.11.0: constraint on inner a value generalised from Monoid to Semigroup.Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmappend :: Maybe a -> Maybe a -> Maybe a Source #mconcat :: [Maybe a] -> Maybe a Source # Monoid a => Monoid (IO a) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsmappend :: IO a -> IO a -> IO a Source #mconcat :: [IO a] -> IO a Source # Monoid p => Monoid (Par1 p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmappend :: Par1 p -> Par1 p -> Par1 p Source #mconcat :: [Par1 p] -> Par1 p Source # Monoid a => Monoid (Down a) # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methodsmappend :: Down a -> Down a -> Down a Source #mconcat :: [Down a] -> Down a Source # Num a => Monoid (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Product a -> Product a -> Product a Source #mconcat :: [Product a] -> Product a Source # Num a => Monoid (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Sum a -> Sum a -> Sum a Source #mconcat :: [Sum a] -> Sum a Source # Monoid (Endo a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Endo a -> Endo a -> Endo a Source #mconcat :: [Endo a] -> Endo a Source # Monoid a => Monoid (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Dual a -> Dual a -> Dual a Source #mconcat :: [Dual a] -> Dual a Source # Monoid (Last a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodsmappend :: Last a -> Last a -> Last a Source #mconcat :: [Last a] -> Last a Source # Monoid (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodsmappend :: First a -> First a -> First a Source #mconcat :: [First a] -> First a Source # Monoid a => Monoid (Identity a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methodsmappend :: Identity a -> Identity a -> Identity a Source #mconcat :: [Identity a] -> Identity a Source # Semigroup a => Monoid (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmappend :: Option a -> Option a -> Option a Source #mconcat :: [Option a] -> Option a Source # Monoid m => Monoid (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmconcat :: [WrappedMonoid m] -> WrappedMonoid m Source # (Ord a, Bounded a) => Monoid (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmappend :: Max a -> Max a -> Max a Source #mconcat :: [Max a] -> Max a Source # (Ord a, Bounded a) => Monoid (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmappend :: Min a -> Min a -> Min a Source #mconcat :: [Min a] -> Min a Source # # Instance detailsDefined in Data.Functor.Contravariant Methodsmconcat :: [Equivalence a] -> Equivalence a Source # # Instance detailsDefined in Data.Functor.Contravariant Methodsmappend :: Comparison a -> Comparison a -> Comparison a Source #mconcat :: [Comparison a] -> Comparison a Source # # Instance detailsDefined in Data.Functor.Contravariant Methodsmappend :: Predicate a -> Predicate a -> Predicate a Source #mconcat :: [Predicate a] -> Predicate a Source # Monoid b => Monoid (a -> b) # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: a -> b Source #mappend :: (a -> b) -> (a -> b) -> a -> b Source #mconcat :: [a -> b] -> a -> b Source # Monoid (U1 p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmappend :: U1 p -> U1 p -> U1 p Source #mconcat :: [U1 p] -> U1 p Source # (Monoid a, Monoid b) => Monoid (a, b) # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b) Source #mappend :: (a, b) -> (a, b) -> (a, b) Source #mconcat :: [(a, b)] -> (a, b) Source # Monoid a => Monoid (ST s a) # Since: base-4.11.0.0 Instance detailsDefined in GHC.ST Methodsmempty :: ST s a Source #mappend :: ST s a -> ST s a -> ST s a Source #mconcat :: [ST s a] -> ST s a Source # Monoid (Proxy s) # Since: base-4.7.0.0 Instance detailsDefined in Data.Proxy Methodsmappend :: Proxy s -> Proxy s -> Proxy s Source #mconcat :: [Proxy s] -> Proxy s Source # Monoid a => Monoid (Op a b) # Instance detailsDefined in Data.Functor.Contravariant Methodsmempty :: Op a b Source #mappend :: Op a b -> Op a b -> Op a b Source #mconcat :: [Op a b] -> Op a b Source # Monoid (f p) => Monoid (Rec1 f p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: Rec1 f p Source #mappend :: Rec1 f p -> Rec1 f p -> Rec1 f p Source #mconcat :: [Rec1 f p] -> Rec1 f p Source # (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c) Source #mappend :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #mconcat :: [(a, b, c)] -> (a, b, c) Source # Alternative f => Monoid (Alt f a) # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsmempty :: Alt f a Source #mappend :: Alt f a -> Alt f a -> Alt f a Source #mconcat :: [Alt f a] -> Alt f a Source # (Applicative f, Monoid a) => Monoid (Ap f a) # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methodsmempty :: Ap f a Source #mappend :: Ap f a -> Ap f a -> Ap f a Source #mconcat :: [Ap f a] -> Ap f a Source # Monoid a => Monoid (Const a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methodsmempty :: Const a b Source #mappend :: Const a b -> Const a b -> Const a b Source #mconcat :: [Const a b] -> Const a b Source # Monoid c => Monoid (K1 i c p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: K1 i c p Source #mappend :: K1 i c p -> K1 i c p -> K1 i c p Source #mconcat :: [K1 i c p] -> K1 i c p Source # (Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: (f :*: g) p Source #mappend :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Source #mconcat :: [(f :*: g) p] -> (f :*: g) p Source # (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c, d) Source #mappend :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #mconcat :: [(a, b, c, d)] -> (a, b, c, d) Source # Monoid (f p) => Monoid (M1 i c f p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: M1 i c f p Source #mappend :: M1 i c f p -> M1 i c f p -> M1 i c f p Source #mconcat :: [M1 i c f p] -> M1 i c f p Source # Monoid (f (g p)) => Monoid ((f :.: g) p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methodsmempty :: (f :.: g) p Source #mappend :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Source #mconcat :: [(f :.: g) p] -> (f :.: g) p Source # (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) # Since: base-2.1 Instance detailsDefined in GHC.Base Methodsmempty :: (a, b, c, d, e) Source #mappend :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Source #mconcat :: [(a, b, c, d, e)] -> (a, b, c, d, e) Source #

(<>) :: Semigroup a => a -> a -> a infixr 6 Source #

An associative operation.

newtype Dual a Source #

The dual of a Monoid, obtained by swapping the arguments of mappend.

>>> getDual (mappend (Dual "Hello") (Dual "World"))
"WorldHello"


Constructors

 Dual FieldsgetDual :: a

#### Instances

Instances details
 # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(>>=) :: Dual a -> (a -> Dual b) -> Dual b Source #(>>) :: Dual a -> Dual b -> Dual b Source #return :: a -> Dual a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Dual a -> Dual b Source #(<$) :: a -> Dual b -> Dual a Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Fix Methodsmfix :: (a -> Dual a) -> Dual a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Dual a Source #(<*>) :: Dual (a -> b) -> Dual a -> Dual b Source #liftA2 :: (a -> b -> c) -> Dual a -> Dual b -> Dual c Source #(*>) :: Dual a -> Dual b -> Dual b Source #(<*) :: Dual a -> Dual b -> Dual a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Foldable Methodsfold :: Monoid m => Dual m -> m Source #foldMap :: Monoid m => (a -> m) -> Dual a -> m Source #foldMap' :: Monoid m => (a -> m) -> Dual a -> m Source #foldr :: (a -> b -> b) -> b -> Dual a -> b Source #foldr' :: (a -> b -> b) -> b -> Dual a -> b Source #foldl :: (b -> a -> b) -> b -> Dual a -> b Source #foldl' :: (b -> a -> b) -> b -> Dual a -> b Source #foldr1 :: (a -> a -> a) -> Dual a -> a Source #foldl1 :: (a -> a -> a) -> Dual a -> a Source #toList :: Dual a -> [a] Source #null :: Dual a -> Bool Source #length :: Dual a -> Int Source #elem :: Eq a => a -> Dual a -> Bool Source #maximum :: Ord a => Dual a -> a Source #minimum :: Ord a => Dual a -> a Source #sum :: Num a => Dual a -> a Source #product :: Num a => Dual a -> a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Traversable Methodstraverse :: Applicative f => (a -> f b) -> Dual a -> f (Dual b) Source #sequenceA :: Applicative f => Dual (f a) -> f (Dual a) Source #mapM :: Monad m => (a -> m b) -> Dual a -> m (Dual b) Source #sequence :: Monad m => Dual (m a) -> m (Dual a) Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Zip Methodsmzip :: Dual a -> Dual b -> Dual (a, b) Source #mzipWith :: (a -> b -> c) -> Dual a -> Dual b -> Dual c Source #munzip :: Dual (a, b) -> (Dual a, Dual b) Source # Bounded a => Bounded (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods Eq a => Eq (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(==) :: Dual a -> Dual a -> Bool Source #(/=) :: Dual a -> Dual a -> Bool Source # Data a => Data (Dual a) # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Dual a -> c (Dual a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Dual a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Dual a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Dual a)) Source #gmapT :: (forall b. Data b => b -> b) -> Dual a -> Dual a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Dual a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Dual a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Dual a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Dual a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Dual a -> m (Dual a) Source # Ord a => Ord (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodscompare :: Dual a -> Dual a -> Ordering Source #(<) :: Dual a -> Dual a -> Bool Source #(<=) :: Dual a -> Dual a -> Bool Source #(>) :: Dual a -> Dual a -> Bool Source #(>=) :: Dual a -> Dual a -> Bool Source #max :: Dual a -> Dual a -> Dual a Source #min :: Dual a -> Dual a -> Dual a Source # Read a => Read (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsreadsPrec :: Int -> ReadS (Dual a) Source # Show a => Show (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsshowsPrec :: Int -> Dual a -> ShowS Source #show :: Dual a -> String Source #showList :: [Dual a] -> ShowS Source # Generic (Dual a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep (Dual a) :: Type -> Type Source # Methodsfrom :: Dual a -> Rep (Dual a) x Source #to :: Rep (Dual a) x -> Dual a Source # Semigroup a => Semigroup (Dual a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Dual a -> Dual a -> Dual a Source #sconcat :: NonEmpty (Dual a) -> Dual a Source #stimes :: Integral b => b -> Dual a -> Dual a Source # Monoid a => Monoid (Dual a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Dual a -> Dual a -> Dual a Source #mconcat :: [Dual a] -> Dual a Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep1 Dual :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Dual a -> Rep1 Dual a Source #to1 :: forall (a :: k). Rep1 Dual a -> Dual a Source # type Rep (Dual a) # Instance detailsDefined in Data.Semigroup.Internal type Rep (Dual a) = D1 ('MetaData "Dual" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Dual" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDual") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Dual # Instance detailsDefined in Data.Semigroup.Internal type Rep1 Dual = D1 ('MetaData "Dual" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Dual" 'PrefixI 'True) (S1 ('MetaSel ('Just "getDual") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) newtype Endo a Source # The monoid of endomorphisms under composition. >>> let computation = Endo ("Hello, " ++) <> Endo (++ "!") >>> appEndo computation "Haskell" "Hello, Haskell!"  Constructors  Endo FieldsappEndo :: a -> a #### Instances Instances details  Generic (Endo a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep (Endo a) :: Type -> Type Source # Methodsfrom :: Endo a -> Rep (Endo a) x Source #to :: Rep (Endo a) x -> Endo a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Endo a -> Endo a -> Endo a Source #sconcat :: NonEmpty (Endo a) -> Endo a Source #stimes :: Integral b => b -> Endo a -> Endo a Source # Monoid (Endo a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Endo a -> Endo a -> Endo a Source #mconcat :: [Endo a] -> Endo a Source # type Rep (Endo a) # Instance detailsDefined in Data.Semigroup.Internal type Rep (Endo a) = D1 ('MetaData "Endo" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Endo" 'PrefixI 'True) (S1 ('MetaSel ('Just "appEndo") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a -> a)))) # Bool wrappers newtype All Source # Boolean monoid under conjunction (&&). >>> getAll (All True <> mempty <> All False) False  >>> getAll (mconcat (map (\x -> All (even x)) [2,4,6,7,8])) False  Constructors  All FieldsgetAll :: Bool #### Instances Instances details  # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(==) :: All -> All -> Bool Source #(/=) :: All -> All -> Bool Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> All -> c All Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c All Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c All) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c All) Source #gmapT :: (forall b. Data b => b -> b) -> All -> All Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> All -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> All -> r Source #gmapQ :: (forall d. Data d => d -> u) -> All -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> All -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> All -> m All Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> All -> m All Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> All -> m All Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(<) :: All -> All -> Bool Source #(<=) :: All -> All -> Bool Source #(>) :: All -> All -> Bool Source #(>=) :: All -> All -> Bool Source #max :: All -> All -> All Source #min :: All -> All -> All Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsshowList :: [All] -> ShowS Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep All :: Type -> Type Source # Methodsfrom :: All -> Rep All x Source #to :: Rep All x -> All Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: All -> All -> All Source #stimes :: Integral b => b -> All -> All Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: All -> All -> All Source #mconcat :: [All] -> All Source # type Rep All # Instance detailsDefined in Data.Semigroup.Internal type Rep All = D1 ('MetaData "All" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "All" 'PrefixI 'True) (S1 ('MetaSel ('Just "getAll") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))) newtype Any Source # Boolean monoid under disjunction (||). >>> getAny (Any True <> mempty <> Any False) True  >>> getAny (mconcat (map (\x -> Any (even x)) [2,4,6,7,8])) True  Constructors  Any FieldsgetAny :: Bool #### Instances Instances details  # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(==) :: Any -> Any -> Bool Source #(/=) :: Any -> Any -> Bool Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Any -> c Any Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Any Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Any) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Any) Source #gmapT :: (forall b. Data b => b -> b) -> Any -> Any Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Any -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Any -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Any -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Any -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Any -> m Any Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Any -> m Any Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Any -> m Any Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(<) :: Any -> Any -> Bool Source #(<=) :: Any -> Any -> Bool Source #(>) :: Any -> Any -> Bool Source #(>=) :: Any -> Any -> Bool Source #max :: Any -> Any -> Any Source #min :: Any -> Any -> Any Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsshowList :: [Any] -> ShowS Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep Any :: Type -> Type Source # Methodsfrom :: Any -> Rep Any x Source #to :: Rep Any x -> Any Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Any -> Any -> Any Source #stimes :: Integral b => b -> Any -> Any Source # # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Any -> Any -> Any Source #mconcat :: [Any] -> Any Source # type Rep Any # Instance detailsDefined in Data.Semigroup.Internal type Rep Any = D1 ('MetaData "Any" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Any" 'PrefixI 'True) (S1 ('MetaSel ('Just "getAny") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))) # Num wrappers newtype Sum a Source # Monoid under addition. >>> getSum (Sum 1 <> Sum 2 <> mempty) 3  Constructors  Sum FieldsgetSum :: a #### Instances Instances details  # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(>>=) :: Sum a -> (a -> Sum b) -> Sum b Source #(>>) :: Sum a -> Sum b -> Sum b Source #return :: a -> Sum a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Sum a -> Sum b Source #(<$) :: a -> Sum b -> Sum a Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Fix Methodsmfix :: (a -> Sum a) -> Sum a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Sum a Source #(<*>) :: Sum (a -> b) -> Sum a -> Sum b Source #liftA2 :: (a -> b -> c) -> Sum a -> Sum b -> Sum c Source #(*>) :: Sum a -> Sum b -> Sum b Source #(<*) :: Sum a -> Sum b -> Sum a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Foldable Methodsfold :: Monoid m => Sum m -> m Source #foldMap :: Monoid m => (a -> m) -> Sum a -> m Source #foldMap' :: Monoid m => (a -> m) -> Sum a -> m Source #foldr :: (a -> b -> b) -> b -> Sum a -> b Source #foldr' :: (a -> b -> b) -> b -> Sum a -> b Source #foldl :: (b -> a -> b) -> b -> Sum a -> b Source #foldl' :: (b -> a -> b) -> b -> Sum a -> b Source #foldr1 :: (a -> a -> a) -> Sum a -> a Source #foldl1 :: (a -> a -> a) -> Sum a -> a Source #toList :: Sum a -> [a] Source #null :: Sum a -> Bool Source #length :: Sum a -> Int Source #elem :: Eq a => a -> Sum a -> Bool Source #maximum :: Ord a => Sum a -> a Source #minimum :: Ord a => Sum a -> a Source #sum :: Num a => Sum a -> a Source #product :: Num a => Sum a -> a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Traversable Methodstraverse :: Applicative f => (a -> f b) -> Sum a -> f (Sum b) Source #sequenceA :: Applicative f => Sum (f a) -> f (Sum a) Source #mapM :: Monad m => (a -> m b) -> Sum a -> m (Sum b) Source #sequence :: Monad m => Sum (m a) -> m (Sum a) Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Zip Methodsmzip :: Sum a -> Sum b -> Sum (a, b) Source #mzipWith :: (a -> b -> c) -> Sum a -> Sum b -> Sum c Source #munzip :: Sum (a, b) -> (Sum a, Sum b) Source # Bounded a => Bounded (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods Eq a => Eq (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(==) :: Sum a -> Sum a -> Bool Source #(/=) :: Sum a -> Sum a -> Bool Source # Data a => Data (Sum a) # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sum a -> c (Sum a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Sum a) Source #toConstr :: Sum a -> Constr Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Sum a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Sum a)) Source #gmapT :: (forall b. Data b => b -> b) -> Sum a -> Sum a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Sum a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Sum a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source # Num a => Num (Sum a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(+) :: Sum a -> Sum a -> Sum a Source #(-) :: Sum a -> Sum a -> Sum a Source #(*) :: Sum a -> Sum a -> Sum a Source #negate :: Sum a -> Sum a Source #abs :: Sum a -> Sum a Source #signum :: Sum a -> Sum a Source # Ord a => Ord (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodscompare :: Sum a -> Sum a -> Ordering Source #(<) :: Sum a -> Sum a -> Bool Source #(<=) :: Sum a -> Sum a -> Bool Source #(>) :: Sum a -> Sum a -> Bool Source #(>=) :: Sum a -> Sum a -> Bool Source #max :: Sum a -> Sum a -> Sum a Source #min :: Sum a -> Sum a -> Sum a Source # Read a => Read (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsreadsPrec :: Int -> ReadS (Sum a) Source # Show a => Show (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsshowsPrec :: Int -> Sum a -> ShowS Source #show :: Sum a -> String Source #showList :: [Sum a] -> ShowS Source # Generic (Sum a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep (Sum a) :: Type -> Type Source # Methodsfrom :: Sum a -> Rep (Sum a) x Source #to :: Rep (Sum a) x -> Sum a Source # Num a => Semigroup (Sum a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Sum a -> Sum a -> Sum a Source #sconcat :: NonEmpty (Sum a) -> Sum a Source #stimes :: Integral b => b -> Sum a -> Sum a Source # Num a => Monoid (Sum a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Sum a -> Sum a -> Sum a Source #mconcat :: [Sum a] -> Sum a Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep1 Sum :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Sum a -> Rep1 Sum a Source #to1 :: forall (a :: k). Rep1 Sum a -> Sum a Source # type Rep (Sum a) # Instance detailsDefined in Data.Semigroup.Internal type Rep (Sum a) = D1 ('MetaData "Sum" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Sum" 'PrefixI 'True) (S1 ('MetaSel ('Just "getSum") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Sum # Instance detailsDefined in Data.Semigroup.Internal type Rep1 Sum = D1 ('MetaData "Sum" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Sum" 'PrefixI 'True) (S1 ('MetaSel ('Just "getSum") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

newtype Product a Source #

Monoid under multiplication.

>>> getProduct (Product 3 <> Product 4 <> mempty)
12


Constructors

 Product FieldsgetProduct :: a

#### Instances

Instances details
 # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(>>=) :: Product a -> (a -> Product b) -> Product b Source #(>>) :: Product a -> Product b -> Product b Source #return :: a -> Product a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodsfmap :: (a -> b) -> Product a -> Product b Source #(<$) :: a -> Product b -> Product a Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Fix Methodsmfix :: (a -> Product a) -> Product a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methodspure :: a -> Product a Source #(<*>) :: Product (a -> b) -> Product a -> Product b Source #liftA2 :: (a -> b -> c) -> Product a -> Product b -> Product c Source #(*>) :: Product a -> Product b -> Product b Source #(<*) :: Product a -> Product b -> Product a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Foldable Methodsfold :: Monoid m => Product m -> m Source #foldMap :: Monoid m => (a -> m) -> Product a -> m Source #foldMap' :: Monoid m => (a -> m) -> Product a -> m Source #foldr :: (a -> b -> b) -> b -> Product a -> b Source #foldr' :: (a -> b -> b) -> b -> Product a -> b Source #foldl :: (b -> a -> b) -> b -> Product a -> b Source #foldl' :: (b -> a -> b) -> b -> Product a -> b Source #foldr1 :: (a -> a -> a) -> Product a -> a Source #foldl1 :: (a -> a -> a) -> Product a -> a Source #toList :: Product a -> [a] Source #null :: Product a -> Bool Source #length :: Product a -> Int Source #elem :: Eq a => a -> Product a -> Bool Source #maximum :: Ord a => Product a -> a Source #minimum :: Ord a => Product a -> a Source #sum :: Num a => Product a -> a Source #product :: Num a => Product a -> a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Traversable Methodstraverse :: Applicative f => (a -> f b) -> Product a -> f (Product b) Source #sequenceA :: Applicative f => Product (f a) -> f (Product a) Source #mapM :: Monad m => (a -> m b) -> Product a -> m (Product b) Source #sequence :: Monad m => Product (m a) -> m (Product a) Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Zip Methodsmzip :: Product a -> Product b -> Product (a, b) Source #mzipWith :: (a -> b -> c) -> Product a -> Product b -> Product c Source #munzip :: Product (a, b) -> (Product a, Product b) Source # Bounded a => Bounded (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods Eq a => Eq (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods(==) :: Product a -> Product a -> Bool Source #(/=) :: Product a -> Product a -> Bool Source # Data a => Data (Product a) # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Product a -> c (Product a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Product a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Product a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Product a)) Source #gmapT :: (forall b. Data b => b -> b) -> Product a -> Product a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Product a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Product a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source # Num a => Num (Product a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(+) :: Product a -> Product a -> Product a Source #(-) :: Product a -> Product a -> Product a Source #(*) :: Product a -> Product a -> Product a Source #negate :: Product a -> Product a Source #abs :: Product a -> Product a Source #signum :: Product a -> Product a Source # Ord a => Ord (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodscompare :: Product a -> Product a -> Ordering Source #(<) :: Product a -> Product a -> Bool Source #(<=) :: Product a -> Product a -> Bool Source #(>) :: Product a -> Product a -> Bool Source #(>=) :: Product a -> Product a -> Bool Source #max :: Product a -> Product a -> Product a Source #min :: Product a -> Product a -> Product a Source # Read a => Read (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methods Show a => Show (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal MethodsshowsPrec :: Int -> Product a -> ShowS Source #show :: Product a -> String Source #showList :: [Product a] -> ShowS Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep (Product a) :: Type -> Type Source # Methodsfrom :: Product a -> Rep (Product a) x Source #to :: Rep (Product a) x -> Product a Source # Num a => Semigroup (Product a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Product a -> Product a -> Product a Source #sconcat :: NonEmpty (Product a) -> Product a Source #stimes :: Integral b => b -> Product a -> Product a Source # Num a => Monoid (Product a) # Since: base-2.1 Instance detailsDefined in Data.Semigroup.Internal Methodsmappend :: Product a -> Product a -> Product a Source #mconcat :: [Product a] -> Product a Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Associated Typestype Rep1 Product :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Product a -> Rep1 Product a Source #to1 :: forall (a :: k). Rep1 Product a -> Product a Source # type Rep (Product a) # Instance detailsDefined in Data.Semigroup.Internal type Rep (Product a) = D1 ('MetaData "Product" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Product" 'PrefixI 'True) (S1 ('MetaSel ('Just "getProduct") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Product # Instance detailsDefined in Data.Semigroup.Internal type Rep1 Product = D1 ('MetaData "Product" "Data.Semigroup.Internal" "base" 'True) (C1 ('MetaCons "Product" 'PrefixI 'True) (S1 ('MetaSel ('Just "getProduct") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) # Maybe wrappers To implement find or findLast on any Foldable: findLast :: Foldable t => (a -> Bool) -> t a -> Maybe a findLast pred = getLast . foldMap (x -> if pred x then Last (Just x) else Last Nothing)  Much of Maps interface can be implemented with alter. Some of the rest can be implemented with a new alterF function and either First or Last: alterF :: (Functor f, Ord k) => (Maybe a -> f (Maybe a)) -> k -> Map k a -> f (Map k a) instance Monoid a => Functor ((,) a) -- from Data.Functor insertLookupWithKey :: Ord k => (k -> v -> v -> v) -> k -> v -> Map k v -> (Maybe v, Map k v) insertLookupWithKey combine key value = Arrow.first getFirst . alterF doChange key where doChange Nothing = (First Nothing, Just value) doChange (Just oldValue) = (First (Just oldValue), Just (combine key value oldValue))  newtype First a Source # Maybe monoid returning the leftmost non-Nothing value. First a is isomorphic to Alt Maybe a, but precedes it historically. >>> getFirst (First (Just "hello") <> First Nothing <> First (Just "world")) Just "hello"  Use of this type is discouraged. Note the following equivalence: Data.Monoid.First x === Maybe (Data.Semigroup.First x) In addition to being equivalent in the structural sense, the two also have Monoid instances that behave the same. This type will be marked deprecated in GHC 8.8, and removed in GHC 8.10. Users are advised to use the variant from Data.Semigroup and wrap it in Maybe. Constructors  First FieldsgetFirst :: Maybe a #### Instances Instances details  # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methods(>>=) :: First a -> (a -> First b) -> First b Source #(>>) :: First a -> First b -> First b Source #return :: a -> First a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Fix Methodsmfix :: (a -> First a) -> First a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Monoid Methodspure :: a -> First a Source #(<*>) :: First (a -> b) -> First a -> First b Source #liftA2 :: (a -> b -> c) -> First a -> First b -> First c Source #(*>) :: First a -> First b -> First b Source #(<*) :: First a -> First b -> First a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Foldable Methodsfold :: Monoid m => First m -> m Source #foldMap :: Monoid m => (a -> m) -> First a -> m Source #foldMap' :: Monoid m => (a -> m) -> First a -> m Source #foldr :: (a -> b -> b) -> b -> First a -> b Source #foldr' :: (a -> b -> b) -> b -> First a -> b Source #foldl :: (b -> a -> b) -> b -> First a -> b Source #foldl' :: (b -> a -> b) -> b -> First a -> b Source #foldr1 :: (a -> a -> a) -> First a -> a Source #foldl1 :: (a -> a -> a) -> First a -> a Source #toList :: First a -> [a] Source #null :: First a -> Bool Source #length :: First a -> Int Source #elem :: Eq a => a -> First a -> Bool Source #maximum :: Ord a => First a -> a Source #minimum :: Ord a => First a -> a Source #sum :: Num a => First a -> a Source #product :: Num a => First a -> a Source # # Since: base-4.8.0.0 Instance detailsDefined in Data.Traversable Methodstraverse :: Applicative f => (a -> f b) -> First a -> f (First b) Source #sequenceA :: Applicative f => First (f a) -> f (First a) Source #mapM :: Monad m => (a -> m b) -> First a -> m (First b) Source #sequence :: Monad m => First (m a) -> m (First a) Source # # Since: base-4.8.0.0 Instance detailsDefined in Control.Monad.Zip Methodsmzip :: First a -> First b -> First (a, b) Source #mzipWith :: (a -> b -> c) -> First a -> First b -> First c Source #munzip :: First (a, b) -> (First a, First b) Source # Eq a => Eq (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methods(==) :: First a -> First a -> Bool Source #(/=) :: First a -> First a -> Bool Source # Data a => Data (First a) # Since: base-4.8.0.0 Instance detailsDefined in Data.Data Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> First a -> c (First a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (First a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (First a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (First a)) Source #gmapT :: (forall b. Data b => b -> b) -> First a -> First a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> First a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> First a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> First a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> First a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> First a -> m (First a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> First a -> m (First a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> First a -> m (First a) Source # Ord a => Ord (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodscompare :: First a -> First a -> Ordering Source #(<) :: First a -> First a -> Bool Source #(<=) :: First a -> First a -> Bool Source #(>) :: First a -> First a -> Bool Source #(>=) :: First a -> First a -> Bool Source #max :: First a -> First a -> First a Source #min :: First a -> First a -> First a Source # Read a => Read (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methods Show a => Show (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid MethodsshowsPrec :: Int -> First a -> ShowS Source #show :: First a -> String Source #showList :: [First a] -> ShowS Source # Generic (First a) # Since: base-4.7.0.0 Instance detailsDefined in Data.Monoid Associated Typestype Rep (First a) :: Type -> Type Source # Methodsfrom :: First a -> Rep (First a) x Source #to :: Rep (First a) x -> First a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: First a -> First a -> First a Source #sconcat :: NonEmpty (First a) -> First a Source #stimes :: Integral b => b -> First a -> First a Source # Monoid (First a) # Since: base-2.1 Instance detailsDefined in Data.Monoid Methodsmappend :: First a -> First a -> First a Source #mconcat :: [First a] -> First a Source # # Since: base-4.7.0.0 Instance detailsDefined in Data.Monoid Associated Typestype Rep1 First :: k -> Type Source # Methodsfrom1 :: forall (a :: k). First a -> Rep1 First a Source #to1 :: forall (a :: k). Rep1 First a -> First a Source # type Rep (First a) # Instance detailsDefined in Data.Monoid type Rep (First a) = D1 ('MetaData "First" "Data.Monoid" "base" 'True) (C1 ('MetaCons "First" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFirst") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe a)))) type Rep1 First # Instance detailsDefined in Data.Monoid type Rep1 First = D1 ('MetaData "First" "Data.Monoid" "base" 'True) (C1 ('MetaCons "First" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFirst") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 Maybe)))

newtype Last a Source #

Maybe monoid returning the rightmost non-Nothing value.

Last a is isomorphic to Dual (First a), and thus to Dual (Alt Maybe a)

>>> getLast (Last (Just "hello") <> Last Nothing <> Last (Just "world"))
Just "world"


Use of this type is discouraged. Note the following equivalence:

Data.Monoid.Last x === Maybe (Data.Semigroup.Last x)

In addition to being equivalent in the structural sense, the two also have Monoid instances that behave the same. This type will be marked deprecated in GHC 8.8, and removed in GHC 8.10. Users are advised to use the variant from Data.Semigroup and wrap it in Maybe.

Constructors

 Last FieldsgetLast :: Maybe a

#### Instances

Instances details