base-4.15.0.0: Basic libraries

Data.Semigroup

Description

A type a is a Semigroup if it provides an associative function (<>) that lets you combine any two values of type a into one. Where being associative means that the following must always hold:

>>> (a <> b) <> c == a <> (b <> c)


#### Examples

Expand

The Min Semigroup instance for Int is defined to always pick the smaller number: >>> Min 1 <> Min 2 <> Min 3 <> Min 4 :: Min Int Min {getMin = 1}

If we need to combine multiple values we can use the sconcat function to do so. We need to ensure however that we have at least one value to operate on, since otherwise our result would be undefined. It is for this reason that sconcat uses Data.List.NonEmpty.NonEmpty - a list that can never be empty:

>>> (1 :| [])
1 :| []               -- equivalent to [1] but guaranteed to be non-empty
>>> (1 :| [2, 3, 4])
1 :| [2,3,4]          -- equivalent to [1,2,3,4] but guaranteed to be non-empty


Equipped with this guaranteed to be non-empty data structure, we can combine values using sconcat and a Semigroup of our choosing. We can try the Min and Max instances of Int which pick the smallest, or largest number respectively:

>>> sconcat (1 :| [2, 3, 4]) :: Min Int
Min {getMin = 1}
>>> sconcat (1 :| [2, 3, 4]) :: Max Int
Max {getMax = 4}


String concatenation is another example of a Semigroup instance:

>>> "foo" <> "bar"
"foobar"


A Semigroup is a generalization of a Monoid. Yet unlike the Semigroup, the Monoid requires the presence of a neutral element (mempty) in addition to the associative operator. The requirement for a neutral element prevents many types from being a full Monoid, like Data.List.NonEmpty.NonEmpty.

Note that the use of (<>) in this module conflicts with an operator with the same name that is being exported by Data.Monoid. However, this package re-exports (most of) the contents of Data.Monoid, so to use semigroups and monoids in the same package just

import Data.Semigroup

Since: base-4.9.0.0

Synopsis

# Documentation

class Semigroup a where Source #

The class of semigroups (types with an associative binary operation).

Instances should satisfy the following:

Associativity
x <> (y <> z) = (x <> y) <> z

Since: base-4.9.0.0

Minimal complete definition

(<>)

Methods

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

An associative operation.

>>> [1,2,3] <> [4,5,6]
[1,2,3,4,5,6]


sconcat :: NonEmpty a -> a Source #

Reduce a non-empty list with <>

The default definition should be sufficient, but this can be overridden for efficiency.

>>> import Data.List.NonEmpty
>>> sconcat $"Hello" :| [" ", "Haskell", "!"] "Hello Haskell!"  stimes :: Integral b => b -> a -> a Source # Repeat a value n times. Given that this works on a Semigroup it is allowed to fail if you request 0 or fewer repetitions, and the default definition will do so. By making this a member of the class, idempotent semigroups and monoids can upgrade this to execute in $$\mathcal{O}(1)$$ by picking stimes = stimesIdempotent or stimes = stimesIdempotentMonoid respectively. >>> stimes 4 [1] [1,1,1,1]  #### Instances Instances details  # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methodsstimes :: Integral b => b -> Ordering -> Ordering Source # # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: () -> () -> () Source #sconcat :: NonEmpty () -> () Source #stimes :: Integral b => b -> () -> () 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-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: All -> All -> All Source #stimes :: Integral b => b -> All -> All Source # # Since: base-4.10.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsstimes :: Integral b => b -> Lifetime -> Lifetime Source # # Since: base-4.10.0.0 Instance detailsDefined in GHC.Event.Internal.Types Methodsstimes :: Integral b => b -> Event -> Event Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Void Methods(<>) :: Void -> Void -> Void Source #stimes :: Integral b => b -> Void -> Void Source # Semigroup [a] # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: [a] -> [a] -> [a] Source #sconcat :: NonEmpty [a] -> [a] Source #stimes :: Integral b => b -> [a] -> [a] Source # Semigroup a => Semigroup (Maybe a) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: Maybe a -> Maybe a -> Maybe a Source #sconcat :: NonEmpty (Maybe a) -> Maybe a Source #stimes :: Integral b => b -> Maybe a -> Maybe a Source # Semigroup a => Semigroup (IO a) # Since: base-4.10.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: IO a -> IO a -> IO a Source #sconcat :: NonEmpty (IO a) -> IO a Source #stimes :: Integral b => b -> IO a -> IO a Source # Semigroup p => Semigroup (Par1 p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: Par1 p -> Par1 p -> Par1 p Source #sconcat :: NonEmpty (Par1 p) -> Par1 p Source #stimes :: Integral b => b -> Par1 p -> Par1 p Source # # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: NonEmpty a -> NonEmpty a -> NonEmpty a Source #stimes :: Integral b => b -> NonEmpty a -> NonEmpty a Source # Semigroup a => Semigroup (Down a) # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methods(<>) :: Down a -> Down a -> Down a Source #sconcat :: NonEmpty (Down a) -> Down a Source #stimes :: Integral b => b -> Down a -> Down 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 => 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 # # 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 # 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 # # Since: base-4.9.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: Last a -> Last a -> Last a Source #sconcat :: NonEmpty (Last a) -> Last a Source #stimes :: Integral b => b -> Last a -> Last 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 # Semigroup a => Semigroup (Identity a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methods(<>) :: Identity a -> Identity a -> Identity a Source #stimes :: Integral b => b -> Identity a -> Identity a Source # Semigroup a => Semigroup (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Option a -> Option a -> Option a Source #sconcat :: NonEmpty (Option a) -> Option a Source #stimes :: Integral b => b -> Option a -> Option a Source # Monoid m => Semigroup (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsstimes :: Integral b => b -> WrappedMonoid m -> WrappedMonoid m Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Last a -> Last a -> Last a Source #sconcat :: NonEmpty (Last a) -> Last a Source #stimes :: Integral b => b -> Last a -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: First a -> First a -> First a Source #sconcat :: NonEmpty (First a) -> First a Source #stimes :: Integral b => b -> First a -> First a Source # Ord a => Semigroup (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Max a -> Max a -> Max a Source #sconcat :: NonEmpty (Max a) -> Max a Source #stimes :: Integral b => b -> Max a -> Max a Source # Ord a => Semigroup (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Min a -> Min a -> Min a Source #sconcat :: NonEmpty (Min a) -> Min a Source #stimes :: Integral b => b -> Min a -> Min a Source # # (<>) on equivalences uses logical conjunction (&&) on the results. Without newtypes this equals liftA2 (liftA2 (&&)).(<>) :: Equivalence a -> Equivalence a -> Equivalence a Equivalence equiv <> Equivalence equiv' = Equivalence a b -> equiv a b && equiv a b  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Equivalence a -> Equivalence a -> Equivalence a Source #stimes :: Integral b => b -> Equivalence a -> Equivalence a Source # # (<>) on comparisons combines results with (<>) @Ordering. Without newtypes this equals liftA2 (liftA2 (<>)).(<>) :: Comparison a -> Comparison a -> Comparison a Comparison cmp <> Comparison cmp' = Comparison a a' -> cmp a a' <> cmp a a'  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Comparison a -> Comparison a -> Comparison a Source #stimes :: Integral b => b -> Comparison a -> Comparison a Source # # (<>) on predicates uses logical conjunction (&&) on the results. Without newtypes this equals liftA2 (&&).(<>) :: Predicate a -> Predicate a -> Predicate a Predicate pred <> Predicate pred' = Predicate a -> pred a && pred' a  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Predicate a -> Predicate a -> Predicate a Source #stimes :: Integral b => b -> Predicate a -> Predicate a Source # Semigroup b => Semigroup (a -> b) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a -> b) -> (a -> b) -> a -> b Source #sconcat :: NonEmpty (a -> b) -> a -> b Source #stimes :: Integral b0 => b0 -> (a -> b) -> a -> b Source # Semigroup (Either a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Either Methods(<>) :: Either a b -> Either a b -> Either a b Source #sconcat :: NonEmpty (Either a b) -> Either a b Source #stimes :: Integral b0 => b0 -> Either a b -> Either a b Source # Semigroup (V1 p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: V1 p -> V1 p -> V1 p Source #sconcat :: NonEmpty (V1 p) -> V1 p Source #stimes :: Integral b => b -> V1 p -> V1 p Source # Semigroup (U1 p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: U1 p -> U1 p -> U1 p Source #sconcat :: NonEmpty (U1 p) -> U1 p Source #stimes :: Integral b => b -> U1 p -> U1 p Source # (Semigroup a, Semigroup b) => Semigroup (a, b) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b) -> (a, b) -> (a, b) Source #sconcat :: NonEmpty (a, b) -> (a, b) Source #stimes :: Integral b0 => b0 -> (a, b) -> (a, b) Source # Semigroup a => Semigroup (ST s a) # Since: base-4.11.0.0 Instance detailsDefined in GHC.ST Methods(<>) :: ST s a -> ST s a -> ST s a Source #sconcat :: NonEmpty (ST s a) -> ST s a Source #stimes :: Integral b => b -> ST s a -> ST s a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Proxy Methods(<>) :: Proxy s -> Proxy s -> Proxy s Source #sconcat :: NonEmpty (Proxy s) -> Proxy s Source #stimes :: Integral b => b -> Proxy s -> Proxy s Source # Semigroup a => Semigroup (Op a b) # (<>) @(Op a b) without newtypes is (<>) @(b->a) = liftA2 (<>). This lifts the Semigroup operation (<>) over the output of a.(<>) :: Op a b -> Op a b -> Op a b Op f <> Op g = Op a -> f a <> g a  Instance detailsDefined in Data.Functor.Contravariant Methods(<>) :: Op a b -> Op a b -> Op a b Source #sconcat :: NonEmpty (Op a b) -> Op a b Source #stimes :: Integral b0 => b0 -> Op a b -> Op a b Source # Semigroup (f p) => Semigroup (Rec1 f p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: Rec1 f p -> Rec1 f p -> Rec1 f p Source #sconcat :: NonEmpty (Rec1 f p) -> Rec1 f p Source #stimes :: Integral b => b -> Rec1 f p -> Rec1 f p Source # (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c) -> (a, b, c) -> (a, b, c) Source #sconcat :: NonEmpty (a, b, c) -> (a, b, c) Source #stimes :: Integral b0 => b0 -> (a, b, c) -> (a, b, c) Source # Alternative f => Semigroup (Alt f a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(<>) :: Alt f a -> Alt f a -> Alt f a Source #sconcat :: NonEmpty (Alt f a) -> Alt f a Source #stimes :: Integral b => b -> Alt f a -> Alt f a Source # (Applicative f, Semigroup a) => Semigroup (Ap f a) # Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methods(<>) :: Ap f a -> Ap f a -> Ap f a Source #sconcat :: NonEmpty (Ap f a) -> Ap f a Source #stimes :: Integral b => b -> Ap f a -> Ap f a Source # Semigroup a => Semigroup (Const a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methods(<>) :: Const a b -> Const a b -> Const a b Source #sconcat :: NonEmpty (Const a b) -> Const a b Source #stimes :: Integral b0 => b0 -> Const a b -> Const a b Source # Semigroup c => Semigroup (K1 i c p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: K1 i c p -> K1 i c p -> K1 i c p Source #sconcat :: NonEmpty (K1 i c p) -> K1 i c p Source #stimes :: Integral b => b -> K1 i c p -> K1 i c p Source # (Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Source #sconcat :: NonEmpty ((f :*: g) p) -> (f :*: g) p Source #stimes :: Integral b => b -> (f :*: g) p -> (f :*: g) p Source # (Semigroup a, Semigroup b, Semigroup c, Semigroup d) => Semigroup (a, b, c, d) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Source #sconcat :: NonEmpty (a, b, c, d) -> (a, b, c, d) Source #stimes :: Integral b0 => b0 -> (a, b, c, d) -> (a, b, c, d) Source # Semigroup (f p) => Semigroup (M1 i c f p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: M1 i c f p -> M1 i c f p -> M1 i c f p Source #sconcat :: NonEmpty (M1 i c f p) -> M1 i c f p Source #stimes :: Integral b => b -> M1 i c f p -> M1 i c f p Source # Semigroup (f (g p)) => Semigroup ((f :.: g) p) # Since: base-4.12.0.0 Instance detailsDefined in GHC.Generics Methods(<>) :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Source #sconcat :: NonEmpty ((f :.: g) p) -> (f :.: g) p Source #stimes :: Integral b => b -> (f :.: g) p -> (f :.: g) p Source # (Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) # Since: base-4.9.0.0 Instance detailsDefined in GHC.Base Methods(<>) :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Source #sconcat :: NonEmpty (a, b, c, d, e) -> (a, b, c, d, e) Source #stimes :: Integral b0 => b0 -> (a, b, c, d, e) -> (a, b, c, d, e) Source # stimesMonoid :: (Integral b, Monoid a) => b -> a -> a Source # This is a valid definition of stimes for a Monoid. Unlike the default definition of stimes, it is defined for 0 and so it should be preferred where possible. stimesIdempotent :: Integral b => b -> a -> a Source # This is a valid definition of stimes for an idempotent Semigroup. When x <> x = x, this definition should be preferred, because it works in $$\mathcal{O}(1)$$ rather than $$\mathcal{O}(\log n)$$. stimesIdempotentMonoid :: (Integral b, Monoid a) => b -> a -> a Source # This is a valid definition of stimes for an idempotent Monoid. When mappend x x = x, this definition should be preferred, because it works in $$\mathcal{O}(1)$$ rather than $$\mathcal{O}(\log n)$$ mtimesDefault :: (Integral b, Monoid a) => b -> a -> a Source # Repeat a value n times. mtimesDefault n a = a <> a <> ... <> a -- using <> (n-1) times Implemented using stimes and mempty. This is a suitable definition for an mtimes member of Monoid. # Semigroups newtype Min a Source # Constructors  Min FieldsgetMin :: a #### Instances Instances details  # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(>>=) :: Min a -> (a -> Min b) -> Min b Source #(>>) :: Min a -> Min b -> Min b Source #return :: a -> Min a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Min a -> Min b Source #(<$) :: a -> Min b -> Min a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmfix :: (a -> Min a) -> Min a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Min a Source #(<*>) :: Min (a -> b) -> Min a -> Min b Source #liftA2 :: (a -> b -> c) -> Min a -> Min b -> Min c Source #(*>) :: Min a -> Min b -> Min b Source #(<*) :: Min a -> Min b -> Min a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfold :: Monoid m => Min m -> m Source #foldMap :: Monoid m => (a -> m) -> Min a -> m Source #foldMap' :: Monoid m => (a -> m) -> Min a -> m Source #foldr :: (a -> b -> b) -> b -> Min a -> b Source #foldr' :: (a -> b -> b) -> b -> Min a -> b Source #foldl :: (b -> a -> b) -> b -> Min a -> b Source #foldl' :: (b -> a -> b) -> b -> Min a -> b Source #foldr1 :: (a -> a -> a) -> Min a -> a Source #foldl1 :: (a -> a -> a) -> Min a -> a Source #toList :: Min a -> [a] Source #null :: Min a -> Bool Source #length :: Min a -> Int Source #elem :: Eq a => a -> Min a -> Bool Source #maximum :: Ord a => Min a -> a Source #minimum :: Ord a => Min a -> a Source #sum :: Num a => Min a -> a Source #product :: Num a => Min a -> a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodstraverse :: Applicative f => (a -> f b) -> Min a -> f (Min b) Source #sequenceA :: Applicative f => Min (f a) -> f (Min a) Source #mapM :: Monad m => (a -> m b) -> Min a -> m (Min b) Source #sequence :: Monad m => Min (m a) -> m (Min a) Source # Bounded a => Bounded (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Enum a => Enum (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodssucc :: Min a -> Min a Source #pred :: Min a -> Min a Source #toEnum :: Int -> Min a Source #fromEnum :: Min a -> Int Source #enumFrom :: Min a -> [Min a] Source #enumFromThen :: Min a -> Min a -> [Min a] Source #enumFromTo :: Min a -> Min a -> [Min a] Source #enumFromThenTo :: Min a -> Min a -> Min a -> [Min a] Source # Eq a => Eq (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: Min a -> Min a -> Bool Source #(/=) :: Min a -> Min a -> Bool Source # Data a => Data (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Min a -> c (Min a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Min a) Source #toConstr :: Min a -> Constr Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Min a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Min a)) Source #gmapT :: (forall b. Data b => b -> b) -> Min a -> Min a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Min a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Min a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Min a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Min a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) Source # Num a => Num (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(+) :: Min a -> Min a -> Min a Source #(-) :: Min a -> Min a -> Min a Source #(*) :: Min a -> Min a -> Min a Source #negate :: Min a -> Min a Source #abs :: Min a -> Min a Source #signum :: Min a -> Min a Source # Ord a => Ord (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodscompare :: Min a -> Min a -> Ordering Source #(<) :: Min a -> Min a -> Bool Source #(<=) :: Min a -> Min a -> Bool Source #(>) :: Min a -> Min a -> Bool Source #(>=) :: Min a -> Min a -> Bool Source #max :: Min a -> Min a -> Min a Source #min :: Min a -> Min a -> Min a Source # Read a => Read (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsreadsPrec :: Int -> ReadS (Min a) Source # Show a => Show (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> Min a -> ShowS Source #show :: Min a -> String Source #showList :: [Min a] -> ShowS Source # Generic (Min a) # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (Min a) :: Type -> Type Source # Methodsfrom :: Min a -> Rep (Min a) x Source #to :: Rep (Min a) x -> Min a Source # Ord a => Semigroup (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Min a -> Min a -> Min a Source #sconcat :: NonEmpty (Min a) -> Min a Source #stimes :: Integral b => b -> Min a -> Min 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.Semigroup Associated Typestype Rep1 Min :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Min a -> Rep1 Min a Source #to1 :: forall (a :: k). Rep1 Min a -> Min a Source # type Rep (Min a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (Min a) = D1 ('MetaData "Min" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Min" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMin") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Min # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 Min = D1 ('MetaData "Min" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Min" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMin") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

newtype Max a Source #

Constructors

 Max FieldsgetMax :: a

#### Instances

Instances details
 # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(>>=) :: Max a -> (a -> Max b) -> Max b Source #(>>) :: Max a -> Max b -> Max b Source #return :: a -> Max a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Max a -> Max b Source #(<$) :: a -> Max b -> Max a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmfix :: (a -> Max a) -> Max a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Max a Source #(<*>) :: Max (a -> b) -> Max a -> Max b Source #liftA2 :: (a -> b -> c) -> Max a -> Max b -> Max c Source #(*>) :: Max a -> Max b -> Max b Source #(<*) :: Max a -> Max b -> Max a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfold :: Monoid m => Max m -> m Source #foldMap :: Monoid m => (a -> m) -> Max a -> m Source #foldMap' :: Monoid m => (a -> m) -> Max a -> m Source #foldr :: (a -> b -> b) -> b -> Max a -> b Source #foldr' :: (a -> b -> b) -> b -> Max a -> b Source #foldl :: (b -> a -> b) -> b -> Max a -> b Source #foldl' :: (b -> a -> b) -> b -> Max a -> b Source #foldr1 :: (a -> a -> a) -> Max a -> a Source #foldl1 :: (a -> a -> a) -> Max a -> a Source #toList :: Max a -> [a] Source #null :: Max a -> Bool Source #length :: Max a -> Int Source #elem :: Eq a => a -> Max a -> Bool Source #maximum :: Ord a => Max a -> a Source #minimum :: Ord a => Max a -> a Source #sum :: Num a => Max a -> a Source #product :: Num a => Max a -> a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodstraverse :: Applicative f => (a -> f b) -> Max a -> f (Max b) Source #sequenceA :: Applicative f => Max (f a) -> f (Max a) Source #mapM :: Monad m => (a -> m b) -> Max a -> m (Max b) Source #sequence :: Monad m => Max (m a) -> m (Max a) Source # Bounded a => Bounded (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Enum a => Enum (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodssucc :: Max a -> Max a Source #pred :: Max a -> Max a Source #toEnum :: Int -> Max a Source #fromEnum :: Max a -> Int Source #enumFrom :: Max a -> [Max a] Source #enumFromThen :: Max a -> Max a -> [Max a] Source #enumFromTo :: Max a -> Max a -> [Max a] Source #enumFromThenTo :: Max a -> Max a -> Max a -> [Max a] Source # Eq a => Eq (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: Max a -> Max a -> Bool Source #(/=) :: Max a -> Max a -> Bool Source # Data a => Data (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Max a -> c (Max a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Max a) Source #toConstr :: Max a -> Constr Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Max a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Max a)) Source #gmapT :: (forall b. Data b => b -> b) -> Max a -> Max a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Max a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Max a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Max a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Max a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) Source # Num a => Num (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(+) :: Max a -> Max a -> Max a Source #(-) :: Max a -> Max a -> Max a Source #(*) :: Max a -> Max a -> Max a Source #negate :: Max a -> Max a Source #abs :: Max a -> Max a Source #signum :: Max a -> Max a Source # Ord a => Ord (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodscompare :: Max a -> Max a -> Ordering Source #(<) :: Max a -> Max a -> Bool Source #(<=) :: Max a -> Max a -> Bool Source #(>) :: Max a -> Max a -> Bool Source #(>=) :: Max a -> Max a -> Bool Source #max :: Max a -> Max a -> Max a Source #min :: Max a -> Max a -> Max a Source # Read a => Read (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsreadsPrec :: Int -> ReadS (Max a) Source # Show a => Show (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> Max a -> ShowS Source #show :: Max a -> String Source #showList :: [Max a] -> ShowS Source # Generic (Max a) # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (Max a) :: Type -> Type Source # Methodsfrom :: Max a -> Rep (Max a) x Source #to :: Rep (Max a) x -> Max a Source # Ord a => Semigroup (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Max a -> Max a -> Max a Source #sconcat :: NonEmpty (Max a) -> Max a Source #stimes :: Integral b => b -> Max a -> Max a 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 # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep1 Max :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Max a -> Rep1 Max a Source #to1 :: forall (a :: k). Rep1 Max a -> Max a Source # type Rep (Max a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (Max a) = D1 ('MetaData "Max" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Max" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMax") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Max # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 Max = D1 ('MetaData "Max" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Max" 'PrefixI 'True) (S1 ('MetaSel ('Just "getMax") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) newtype First a Source # Constructors  First FieldsgetFirst :: a #### Instances Instances details  # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(>>=) :: First a -> (a -> First b) -> First b Source #(>>) :: First a -> First b -> First b Source #return :: a -> First a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> First a -> First b Source #(<$) :: a -> First b -> First a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmfix :: (a -> First a) -> First a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup 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.9.0.0 Instance detailsDefined in Data.Semigroup 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.9.0.0 Instance detailsDefined in Data.Semigroup 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 # Bounded a => Bounded (First a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Enum a => Enum (First a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodssucc :: First a -> First a Source #pred :: First a -> First a Source #fromEnum :: First a -> Int Source #enumFrom :: First a -> [First a] Source #enumFromThen :: First a -> First a -> [First a] Source #enumFromTo :: First a -> First a -> [First a] Source #enumFromThenTo :: First a -> First a -> First a -> [First a] Source # Eq a => Eq (First a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: First a -> First a -> Bool Source #(/=) :: First a -> First a -> Bool Source # Data a => Data (First a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup 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-4.9.0.0 Instance detailsDefined in Data.Semigroup 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-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Show a => Show (First a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> First a -> ShowS Source #show :: First a -> String Source #showList :: [First a] -> ShowS Source # Generic (First a) # Instance detailsDefined in Data.Semigroup 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.Semigroup Methods(<>) :: First a -> First a -> First a Source #sconcat :: NonEmpty (First a) -> First a Source #stimes :: Integral b => b -> First a -> First a Source # # Instance detailsDefined in Data.Semigroup 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) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (First a) = D1 ('MetaData "First" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "First" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFirst") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 First # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 First = D1 ('MetaData "First" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "First" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFirst") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

newtype Last a Source #

Constructors

 Last FieldsgetLast :: a

#### Instances

Instances details
 # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(>>=) :: Last a -> (a -> Last b) -> Last b Source #(>>) :: Last a -> Last b -> Last b Source #return :: a -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Last a -> Last b Source #(<$) :: a -> Last b -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmfix :: (a -> Last a) -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Last a Source #(<*>) :: Last (a -> b) -> Last a -> Last b Source #liftA2 :: (a -> b -> c) -> Last a -> Last b -> Last c Source #(*>) :: Last a -> Last b -> Last b Source #(<*) :: Last a -> Last b -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfold :: Monoid m => Last m -> m Source #foldMap :: Monoid m => (a -> m) -> Last a -> m Source #foldMap' :: Monoid m => (a -> m) -> Last a -> m Source #foldr :: (a -> b -> b) -> b -> Last a -> b Source #foldr' :: (a -> b -> b) -> b -> Last a -> b Source #foldl :: (b -> a -> b) -> b -> Last a -> b Source #foldl' :: (b -> a -> b) -> b -> Last a -> b Source #foldr1 :: (a -> a -> a) -> Last a -> a Source #foldl1 :: (a -> a -> a) -> Last a -> a Source #toList :: Last a -> [a] Source #null :: Last a -> Bool Source #length :: Last a -> Int Source #elem :: Eq a => a -> Last a -> Bool Source #maximum :: Ord a => Last a -> a Source #minimum :: Ord a => Last a -> a Source #sum :: Num a => Last a -> a Source #product :: Num a => Last a -> a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodstraverse :: Applicative f => (a -> f b) -> Last a -> f (Last b) Source #sequenceA :: Applicative f => Last (f a) -> f (Last a) Source #mapM :: Monad m => (a -> m b) -> Last a -> m (Last b) Source #sequence :: Monad m => Last (m a) -> m (Last a) Source # Bounded a => Bounded (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Enum a => Enum (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodssucc :: Last a -> Last a Source #pred :: Last a -> Last a Source #toEnum :: Int -> Last a Source #fromEnum :: Last a -> Int Source #enumFrom :: Last a -> [Last a] Source #enumFromThen :: Last a -> Last a -> [Last a] Source #enumFromTo :: Last a -> Last a -> [Last a] Source #enumFromThenTo :: Last a -> Last a -> Last a -> [Last a] Source # Eq a => Eq (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: Last a -> Last a -> Bool Source #(/=) :: Last a -> Last a -> Bool Source # Data a => Data (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Last a -> c (Last a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Last a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Last a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Last a)) Source #gmapT :: (forall b. Data b => b -> b) -> Last a -> Last a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Last a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Last a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Last a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Last a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Last a -> m (Last a) Source # Ord a => Ord (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodscompare :: Last a -> Last a -> Ordering Source #(<) :: Last a -> Last a -> Bool Source #(<=) :: Last a -> Last a -> Bool Source #(>) :: Last a -> Last a -> Bool Source #(>=) :: Last a -> Last a -> Bool Source #max :: Last a -> Last a -> Last a Source #min :: Last a -> Last a -> Last a Source # Read a => Read (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsreadsPrec :: Int -> ReadS (Last a) Source # Show a => Show (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> Last a -> ShowS Source #show :: Last a -> String Source #showList :: [Last a] -> ShowS Source # Generic (Last a) # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (Last a) :: Type -> Type Source # Methodsfrom :: Last a -> Rep (Last a) x Source #to :: Rep (Last a) x -> Last a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Last a -> Last a -> Last a Source #sconcat :: NonEmpty (Last a) -> Last a Source #stimes :: Integral b => b -> Last a -> Last a Source # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep1 Last :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Last a -> Rep1 Last a Source #to1 :: forall (a :: k). Rep1 Last a -> Last a Source # type Rep (Last a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (Last a) = D1 ('MetaData "Last" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Last" 'PrefixI 'True) (S1 ('MetaSel ('Just "getLast") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a))) type Rep1 Last # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 Last = D1 ('MetaData "Last" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Last" 'PrefixI 'True) (S1 ('MetaSel ('Just "getLast") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) newtype WrappedMonoid m Source # Provide a Semigroup for an arbitrary Monoid. NOTE: This is not needed anymore since Semigroup became a superclass of Monoid in base-4.11 and this newtype be deprecated at some point in the future. Constructors  WrapMonoid FieldsunwrapMonoid :: m #### Instances Instances details  Bounded m => Bounded (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Enum a => Enum (WrappedMonoid a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsenumFromTo :: WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a] Source # Eq m => Eq (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Data m => Data (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> WrappedMonoid m -> c (WrappedMonoid m) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (WrappedMonoid m) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (WrappedMonoid m)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (WrappedMonoid m)) Source #gmapT :: (forall b. Data b => b -> b) -> WrappedMonoid m -> WrappedMonoid m Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> WrappedMonoid m -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> WrappedMonoid m -> r Source #gmapQ :: (forall d. Data d => d -> u) -> WrappedMonoid m -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> WrappedMonoid m -> u Source #gmapM :: Monad m0 => (forall d. Data d => d -> m0 d) -> WrappedMonoid m -> m0 (WrappedMonoid m) Source #gmapMp :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> WrappedMonoid m -> m0 (WrappedMonoid m) Source #gmapMo :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> WrappedMonoid m -> m0 (WrappedMonoid m) Source # Ord m => Ord (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source #(>) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source # Read m => Read (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Show m => Show (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowList :: [WrappedMonoid m] -> ShowS Source # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (WrappedMonoid m) :: Type -> Type Source # Methodsfrom :: WrappedMonoid m -> Rep (WrappedMonoid m) x Source #to :: Rep (WrappedMonoid m) x -> WrappedMonoid m Source # Monoid m => Semigroup (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsstimes :: Integral b => b -> WrappedMonoid m -> WrappedMonoid m Source # Monoid m => Monoid (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmconcat :: [WrappedMonoid m] -> WrappedMonoid m Source # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep1 WrappedMonoid :: k -> Type Source # Methodsfrom1 :: forall (a :: k). WrappedMonoid a -> Rep1 WrappedMonoid a Source #to1 :: forall (a :: k). Rep1 WrappedMonoid a -> WrappedMonoid a Source # type Rep (WrappedMonoid m) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (WrappedMonoid m) = D1 ('MetaData "WrappedMonoid" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "WrapMonoid" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonoid") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 m))) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 WrappedMonoid = D1 ('MetaData "WrappedMonoid" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "WrapMonoid" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonoid") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) # Re-exported monoids from Data.Monoid 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) # 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 # # 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) # Since: base-4.7.0.0 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 # Since: base-4.7.0.0 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) # 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) # Since: base-4.7.0.0 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))))

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 # # 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 # Since: base-4.7.0.0 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 # # 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 # Since: base-4.7.0.0 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)))

newtype Sum a Source #

>>> getSum (Sum 1 <> Sum 2 <> mempty)
3


Constructors

 Sum FieldsgetSum :: a

#### Instances

Instances details

# A better monoid for Maybe

newtype Option a Source #

Deprecated: will be removed in GHC 9.2; use Maybe instead.

Option is effectively Maybe with a better instance of Monoid, built off of an underlying Semigroup instead of an underlying Monoid.

Ideally, this type would not exist at all and we would just fix the Monoid instance of Maybe.

In GHC 8.4 and higher, the Monoid instance for Maybe has been corrected to lift a Semigroup instance instead of a Monoid instance. Consequently, this type is no longer useful.

Constructors

 Option Deprecated: will be removed in GHC 9.2; use Maybe instead. FieldsgetOption :: Maybe a

#### Instances

Instances details
 # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(>>=) :: Option a -> (a -> Option b) -> Option b Source #(>>) :: Option a -> Option b -> Option b Source #return :: a -> Option a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a -> b) -> Option a -> Option b Source #(<$) :: a -> Option b -> Option a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmfix :: (a -> Option a) -> Option a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodspure :: a -> Option a Source #(<*>) :: Option (a -> b) -> Option a -> Option b Source #liftA2 :: (a -> b -> c) -> Option a -> Option b -> Option c Source #(*>) :: Option a -> Option b -> Option b Source #(<*) :: Option a -> Option b -> Option a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfold :: Monoid m => Option m -> m Source #foldMap :: Monoid m => (a -> m) -> Option a -> m Source #foldMap' :: Monoid m => (a -> m) -> Option a -> m Source #foldr :: (a -> b -> b) -> b -> Option a -> b Source #foldr' :: (a -> b -> b) -> b -> Option a -> b Source #foldl :: (b -> a -> b) -> b -> Option a -> b Source #foldl' :: (b -> a -> b) -> b -> Option a -> b Source #foldr1 :: (a -> a -> a) -> Option a -> a Source #foldl1 :: (a -> a -> a) -> Option a -> a Source #toList :: Option a -> [a] Source #null :: Option a -> Bool Source #length :: Option a -> Int Source #elem :: Eq a => a -> Option a -> Bool Source #maximum :: Ord a => Option a -> a Source #minimum :: Ord a => Option a -> a Source #sum :: Num a => Option a -> a Source #product :: Num a => Option a -> a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodstraverse :: Applicative f => (a -> f b) -> Option a -> f (Option b) Source #sequenceA :: Applicative f => Option (f a) -> f (Option a) Source #mapM :: Monad m => (a -> m b) -> Option a -> m (Option b) Source #sequence :: Monad m => Option (m a) -> m (Option a) Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsmplus :: Option a -> Option a -> Option a Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<|>) :: Option a -> Option a -> Option a Source #some :: Option a -> Option [a] Source #many :: Option a -> Option [a] Source # Eq a => Eq (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: Option a -> Option a -> Bool Source #(/=) :: Option a -> Option a -> Bool Source # Data a => Data (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Option a -> c (Option a) Source #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Option a) Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Option a)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Option a)) Source #gmapT :: (forall b. Data b => b -> b) -> Option a -> Option a Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Option a -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Option a -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Option a -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Option a -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Option a -> m (Option a) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Option a -> m (Option a) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Option a -> m (Option a) Source # Ord a => Ord (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodscompare :: Option a -> Option a -> Ordering Source #(<) :: Option a -> Option a -> Bool Source #(<=) :: Option a -> Option a -> Bool Source #(>) :: Option a -> Option a -> Bool Source #(>=) :: Option a -> Option a -> Bool Source #max :: Option a -> Option a -> Option a Source #min :: Option a -> Option a -> Option a Source # Read a => Read (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods Show a => Show (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> Option a -> ShowS Source #show :: Option a -> String Source #showList :: [Option a] -> ShowS Source # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (Option a) :: Type -> Type Source # Methodsfrom :: Option a -> Rep (Option a) x Source #to :: Rep (Option a) x -> Option a Source # Semigroup a => Semigroup (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(<>) :: Option a -> Option a -> Option a Source #sconcat :: NonEmpty (Option a) -> Option a Source #stimes :: Integral b => b -> Option a -> Option 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 # # Instance detailsDefined in Data.Semigroup Associated Typestype Rep1 Option :: k -> Type Source # Methodsfrom1 :: forall (a :: k). Option a -> Rep1 Option a Source #to1 :: forall (a :: k). Rep1 Option a -> Option a Source # type Rep (Option a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (Option a) = D1 ('MetaData "Option" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Option" 'PrefixI 'True) (S1 ('MetaSel ('Just "getOption") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe a)))) type Rep1 Option # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 Option = D1 ('MetaData "Option" "Data.Semigroup" "base" 'True) (C1 ('MetaCons "Option" 'PrefixI 'True) (S1 ('MetaSel ('Just "getOption") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 Maybe))) option :: b -> (a -> b) -> Option a -> b Source # Deprecated: will be removed in GHC 9.2; use Maybe instead. Fold an Option case-wise, just like maybe. # Difference lists of a semigroup diff :: Semigroup m => m -> Endo m Source # This lets you use a difference list of a Semigroup as a Monoid. ### Example: Expand >>> let hello = diff "Hello, " >>> appEndo hello "World!" "Hello, World!" >>> appEndo (hello <> mempty) "World!" "Hello, World!" >>> appEndo (mempty <> hello) "World!" "Hello, World!" >>> let world = diff "World" >>> let excl = diff "!" >>> appEndo (hello <> (world <> excl)) mempty "Hello, World!" >>> appEndo ((hello <> world) <> excl) mempty "Hello, World!"  cycle1 :: Semigroup m => m -> m Source # A generalization of cycle to an arbitrary Semigroup. May fail to terminate for some values in some semigroups. # ArgMin, ArgMax data Arg a b Source # Arg isn't itself a Semigroup in its own right, but it can be placed inside Min and Max to compute an arg min or arg max. >>> minimum [ Arg (x * x) x | x <- [-10 .. 10] ] Arg 0 0  Constructors  Arg FieldsaThe argument used for comparisons in Eq and Ord.bThe "value" exposed via the Functor, Foldable etc. instances. #### Instances Instances details  # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsbimap :: (a -> b) -> (c -> d) -> Arg a c -> Arg b d Source #first :: (a -> b) -> Arg a c -> Arg b c Source #second :: (b -> c) -> Arg a b -> Arg a c Source # # Since: base-4.10.0.0 Instance detailsDefined in Data.Semigroup Methodsbifold :: Monoid m => Arg m m -> m Source #bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> Arg a b -> m Source #bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> Arg a b -> c Source #bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> Arg a b -> c Source # # Since: base-4.10.0.0 Instance detailsDefined in Data.Semigroup Methodsbitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Arg a b -> f (Arg c d) Source # Functor (Arg a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfmap :: (a0 -> b) -> Arg a a0 -> Arg a b Source #(<$) :: a0 -> Arg a b -> Arg a a0 Source # Foldable (Arg a) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsfold :: Monoid m => Arg a m -> m Source #foldMap :: Monoid m => (a0 -> m) -> Arg a a0 -> m Source #foldMap' :: Monoid m => (a0 -> m) -> Arg a a0 -> m Source #foldr :: (a0 -> b -> b) -> b -> Arg a a0 -> b Source #foldr' :: (a0 -> b -> b) -> b -> Arg a a0 -> b Source #foldl :: (b -> a0 -> b) -> b -> Arg a a0 -> b Source #foldl' :: (b -> a0 -> b) -> b -> Arg a a0 -> b Source #foldr1 :: (a0 -> a0 -> a0) -> Arg a a0 -> a0 Source #foldl1 :: (a0 -> a0 -> a0) -> Arg a a0 -> a0 Source #toList :: Arg a a0 -> [a0] Source #null :: Arg a a0 -> Bool Source #length :: Arg a a0 -> Int Source #elem :: Eq a0 => a0 -> Arg a a0 -> Bool Source #maximum :: Ord a0 => Arg a a0 -> a0 Source #minimum :: Ord a0 => Arg a a0 -> a0 Source #sum :: Num a0 => Arg a a0 -> a0 Source #product :: Num a0 => Arg a a0 -> a0 Source # # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodstraverse :: Applicative f => (a0 -> f b) -> Arg a a0 -> f (Arg a b) Source #sequenceA :: Applicative f => Arg a (f a0) -> f (Arg a a0) Source #mapM :: Monad m => (a0 -> m b) -> Arg a a0 -> m (Arg a b) Source #sequence :: Monad m => Arg a (m a0) -> m (Arg a a0) Source # Generic1 (Arg a :: Type -> Type) # Instance detailsDefined in Data.Semigroup Associated Typestype Rep1 (Arg a) :: k -> Type Source # Methodsfrom1 :: forall (a0 :: k). Arg a a0 -> Rep1 (Arg a) a0 Source #to1 :: forall (a0 :: k). Rep1 (Arg a) a0 -> Arg a a0 Source # Eq a => Eq (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(==) :: Arg a b -> Arg a b -> Bool Source #(/=) :: Arg a b -> Arg a b -> Bool Source # (Data a, Data b) => Data (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodsgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Arg a b -> c (Arg a b) Source #gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Arg a b) Source #toConstr :: Arg a b -> Constr Source #dataTypeOf :: Arg a b -> DataType Source #dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Arg a b)) Source #dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Arg a b)) Source #gmapT :: (forall b0. Data b0 => b0 -> b0) -> Arg a b -> Arg a b Source #gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arg a b -> r Source #gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arg a b -> r Source #gmapQ :: (forall d. Data d => d -> u) -> Arg a b -> [u] Source #gmapQi :: Int -> (forall d. Data d => d -> u) -> Arg a b -> u Source #gmapM :: Monad m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Source #gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Source #gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Source # Ord a => Ord (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methodscompare :: Arg a b -> Arg a b -> Ordering Source #(<) :: Arg a b -> Arg a b -> Bool Source #(<=) :: Arg a b -> Arg a b -> Bool Source #(>) :: Arg a b -> Arg a b -> Bool Source #(>=) :: Arg a b -> Arg a b -> Bool Source #max :: Arg a b -> Arg a b -> Arg a b Source #min :: Arg a b -> Arg a b -> Arg a b Source # (Read a, Read b) => Read (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsreadsPrec :: Int -> ReadS (Arg a b) Source #readList :: ReadS [Arg a b] Source #readPrec :: ReadPrec (Arg a b) Source # (Show a, Show b) => Show (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup MethodsshowsPrec :: Int -> Arg a b -> ShowS Source #show :: Arg a b -> String Source #showList :: [Arg a b] -> ShowS Source # Generic (Arg a b) # Instance detailsDefined in Data.Semigroup Associated Typestype Rep (Arg a b) :: Type -> Type Source # Methodsfrom :: Arg a b -> Rep (Arg a b) x Source #to :: Rep (Arg a b) x -> Arg a b Source # type Rep1 (Arg a :: Type -> Type) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep1 (Arg a :: Type -> Type) = D1 ('MetaData "Arg" "Data.Semigroup" "base" 'False) (C1 ('MetaCons "Arg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1)) type Rep (Arg a b) # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup type Rep (Arg a b) = D1 ('MetaData "Arg" "Data.Semigroup" "base" 'False) (C1 ('MetaCons "Arg" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)))

type ArgMin a b = Min (Arg a b) Source #

>>> Min (Arg 0 ()) <> Min (Arg 1 ())
Min {getMin = Arg 0 ()}


type ArgMax a b = Max (Arg a b) Source #

>>> Max (Arg 0 ()) <> Max (Arg 1 ())
Max {getMax = Arg 1 ()}