{-# LANGUAGE CPP #-}{-# LANGUAGE DefaultSignatures #-}{-# LANGUAGE DeriveDataTypeable #-}{-# LANGUAGE DeriveGeneric #-}{-# LANGUAGE FlexibleContexts #-}{-# LANGUAGE GeneralizedNewtypeDeriving #-}{-# LANGUAGE PolyKinds #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE Trustworthy #-}{-# LANGUAGE TypeOperators #-}------------------------------------------------------------------------------- |-- Module : Data.Semigroup-- Copyright : (C) 2011-2015 Edward Kmett-- License : BSD-style (see the file LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : portable---- 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__---- 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 4.9.0.0----------------------------------------------------------------------------moduleData.Semigroup(Semigroup (..),stimesMonoid ,stimesIdempotent ,stimesIdempotentMonoid ,mtimesDefault -- * Semigroups,Min (..),Max (..),First (..),Last (..),WrappedMonoid (..)-- * Re-exported monoids from Data.Monoid,Dual (..),Endo (..),All (..),Any (..),Sum (..),Product (..)-- * A better monoid for Maybe,Option (..),option -- * Difference lists of a semigroup,diff ,cycle1 -- * ArgMin, ArgMax,Arg (..),ArgMin ,ArgMax )whereimportPrelude hiding(foldr1 )importGHC.Base (Semigroup (..))importData.Semigroup.Internal importControl.Applicative importControl.Monad importControl.Monad.Fix importData.Bifoldable importData.Bifunctor importData.Bitraversable importData.Coerce importData.Data importGHC.Generics -- | A generalization of 'Data.List.cycle' to an arbitrary 'Semigroup'.-- May fail to terminate for some values in some semigroups.cycle1 ::Semigroup m =>m ->m cycle1 :: m -> m
cycle1 xs :: m
xs =m
xs' wherexs' :: m
xs' =m
xs m -> m -> m
forall a. Semigroup a => a -> a -> a
<> m
xs' -- | This lets you use a difference list of a 'Semigroup' as a 'Monoid'.diff ::Semigroup m =>m ->Endo m diff :: m -> Endo m
diff =(m -> m) -> Endo m
forall a. (a -> a) -> Endo a
Endo ((m -> m) -> Endo m) -> (m -> m -> m) -> m -> Endo m
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m -> m -> m
forall a. Semigroup a => a -> a -> a
(<>) newtypeMin a =Min {Min a -> a
getMin ::a }deriving(Bounded -- ^ @since 4.9.0.0,Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceEnum a =>Enum (Min a )wheresucc :: Min a -> Min a
succ (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> a
forall a. Enum a => a -> a
succ a
a )pred :: Min a -> Min a
pred (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> a
forall a. Enum a => a -> a
pred a
a )toEnum :: Int -> Min a
toEnum =a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> (Int -> a) -> Int -> Min a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum fromEnum :: Min a -> Int
fromEnum =a -> Int
forall a. Enum a => a -> Int
fromEnum (a -> Int) -> (Min a -> a) -> Min a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Min a -> a
forall a. Min a -> a
getMin enumFrom :: Min a -> [Min a]
enumFrom (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> [a] -> [Min a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> [a]
forall a. Enum a => a -> [a]
enumFrom a
a enumFromThen :: Min a -> Min a -> [Min a]
enumFromThen (Min a :: a
a )(Min b :: a
b )=a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> [a] -> [Min a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromThen a
a a
b enumFromTo :: Min a -> Min a -> [Min a]
enumFromTo (Min a :: a
a )(Min b :: a
b )=a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> [a] -> [Min a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromTo a
a a
b enumFromThenTo :: Min a -> Min a -> Min a -> [Min a]
enumFromThenTo (Min a :: a
a )(Min b :: a
b )(Min c :: a
c )=a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> [a] -> [Min a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> a -> [a]
forall a. Enum a => a -> a -> a -> [a]
enumFromThenTo a
a a
b a
c -- | @since 4.9.0.0instanceOrda =>Semigroup (Min a )where<> :: Min a -> Min a -> Min a
(<>) =(a -> a -> a) -> Min a -> Min a -> Min a
forall a b. Coercible a b => a -> b
coerce(a -> a -> a
forall a. Ord a => a -> a -> a
min::a ->a ->a )stimes :: b -> Min a -> Min a
stimes =b -> Min a -> Min a
forall b a. Integral b => b -> a -> a
stimesIdempotent -- | @since 4.9.0.0instance(Orda ,Bounded a )=>Monoid (Min a )wheremempty :: Min a
mempty =Min a
forall a. Bounded a => a
maxBound -- | @since 4.9.0.0instanceFunctor Min wherefmap :: (a -> b) -> Min a -> Min b
fmap f :: a -> b
f (Min x :: a
x )=b -> Min b
forall a. a -> Min a
Min (a -> b
f a
x )-- | @since 4.9.0.0instanceFoldable Min wherefoldMap :: (a -> m) -> Min a -> m
foldMap f :: a -> m
f (Min a :: a
a )=a -> m
f a
a -- | @since 4.9.0.0instanceTraversable Min wheretraverse :: (a -> f b) -> Min a -> f (Min b)
traverse f :: a -> f b
f (Min a :: a
a )=b -> Min b
forall a. a -> Min a
Min (b -> Min b) -> f b -> f (Min b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a -- | @since 4.9.0.0instanceApplicative Min wherepure :: a -> Min a
pure =a -> Min a
forall a. a -> Min a
Min a :: Min a
a <* :: Min a -> Min b -> Min a
<* _=Min a
a _*> :: Min a -> Min b -> Min b
*> a :: Min b
a =Min b
a <*> :: Min (a -> b) -> Min a -> Min b
(<*>) =Min (a -> b) -> Min a -> Min b
forall a b. Coercible a b => a -> b
coerceliftA2 :: (a -> b -> c) -> Min a -> Min b -> Min c
liftA2 =(a -> b -> c) -> Min a -> Min b -> Min c
forall a b. Coercible a b => a -> b
coerce-- | @since 4.9.0.0instanceMonad Min where>> :: Min a -> Min b -> Min b
(>>) =Min a -> Min b -> Min b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>) Min a :: a
a >>= :: Min a -> (a -> Min b) -> Min b
>>= f :: a -> Min b
f =a -> Min b
f a
a -- | @since 4.9.0.0instanceMonadFix Min wheremfix :: (a -> Min a) -> Min a
mfix f :: a -> Min a
f =(Min a -> Min a) -> Min a
forall a. (a -> a) -> a
fix (a -> Min a
f (a -> Min a) -> (Min a -> a) -> Min a -> Min a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Min a -> a
forall a. Min a -> a
getMin )-- | @since 4.9.0.0instanceNum a =>Num (Min a )where(Min a :: a
a )+ :: Min a -> Min a -> Min a
+ (Min b :: a
b )=a -> Min a
forall a. a -> Min a
Min (a
a a -> a -> a
forall a. Num a => a -> a -> a
+ a
b )(Min a :: a
a )* :: Min a -> Min a -> Min a
* (Min b :: a
b )=a -> Min a
forall a. a -> Min a
Min (a
a a -> a -> a
forall a. Num a => a -> a -> a
* a
b )(Min a :: a
a )- :: Min a -> Min a -> Min a
- (Min b :: a
b )=a -> Min a
forall a. a -> Min a
Min (a
a a -> a -> a
forall a. Num a => a -> a -> a
- a
b )negate :: Min a -> Min a
negate (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> a
forall a. Num a => a -> a
negate a
a )abs :: Min a -> Min a
abs (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> a
forall a. Num a => a -> a
abs a
a )signum :: Min a -> Min a
signum (Min a :: a
a )=a -> Min a
forall a. a -> Min a
Min (a -> a
forall a. Num a => a -> a
signum a
a )fromInteger :: Integer -> Min a
fromInteger =a -> Min a
forall a. a -> Min a
Min (a -> Min a) -> (Integer -> a) -> Integer -> Min a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> a
forall a. Num a => Integer -> a
fromInteger newtypeMax a =Max {Max a -> a
getMax ::a }deriving(Bounded -- ^ @since 4.9.0.0,Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceEnum a =>Enum (Max a )wheresucc :: Max a -> Max a
succ (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> a
forall a. Enum a => a -> a
succ a
a )pred :: Max a -> Max a
pred (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> a
forall a. Enum a => a -> a
pred a
a )toEnum :: Int -> Max a
toEnum =a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> (Int -> a) -> Int -> Max a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum fromEnum :: Max a -> Int
fromEnum =a -> Int
forall a. Enum a => a -> Int
fromEnum (a -> Int) -> (Max a -> a) -> Max a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Max a -> a
forall a. Max a -> a
getMax enumFrom :: Max a -> [Max a]
enumFrom (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> [a] -> [Max a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> [a]
forall a. Enum a => a -> [a]
enumFrom a
a enumFromThen :: Max a -> Max a -> [Max a]
enumFromThen (Max a :: a
a )(Max b :: a
b )=a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> [a] -> [Max a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromThen a
a a
b enumFromTo :: Max a -> Max a -> [Max a]
enumFromTo (Max a :: a
a )(Max b :: a
b )=a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> [a] -> [Max a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromTo a
a a
b enumFromThenTo :: Max a -> Max a -> Max a -> [Max a]
enumFromThenTo (Max a :: a
a )(Max b :: a
b )(Max c :: a
c )=a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> [a] -> [Max a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> a -> [a]
forall a. Enum a => a -> a -> a -> [a]
enumFromThenTo a
a a
b a
c -- | @since 4.9.0.0instanceOrda =>Semigroup (Max a )where<> :: Max a -> Max a -> Max a
(<>) =(a -> a -> a) -> Max a -> Max a -> Max a
forall a b. Coercible a b => a -> b
coerce(a -> a -> a
forall a. Ord a => a -> a -> a
max::a ->a ->a )stimes :: b -> Max a -> Max a
stimes =b -> Max a -> Max a
forall b a. Integral b => b -> a -> a
stimesIdempotent -- | @since 4.9.0.0instance(Orda ,Bounded a )=>Monoid (Max a )wheremempty :: Max a
mempty =Max a
forall a. Bounded a => a
minBound -- | @since 4.9.0.0instanceFunctor Max wherefmap :: (a -> b) -> Max a -> Max b
fmap f :: a -> b
f (Max x :: a
x )=b -> Max b
forall a. a -> Max a
Max (a -> b
f a
x )-- | @since 4.9.0.0instanceFoldable Max wherefoldMap :: (a -> m) -> Max a -> m
foldMap f :: a -> m
f (Max a :: a
a )=a -> m
f a
a -- | @since 4.9.0.0instanceTraversable Max wheretraverse :: (a -> f b) -> Max a -> f (Max b)
traverse f :: a -> f b
f (Max a :: a
a )=b -> Max b
forall a. a -> Max a
Max (b -> Max b) -> f b -> f (Max b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a -- | @since 4.9.0.0instanceApplicative Max wherepure :: a -> Max a
pure =a -> Max a
forall a. a -> Max a
Max a :: Max a
a <* :: Max a -> Max b -> Max a
<* _=Max a
a _*> :: Max a -> Max b -> Max b
*> a :: Max b
a =Max b
a <*> :: Max (a -> b) -> Max a -> Max b
(<*>) =Max (a -> b) -> Max a -> Max b
forall a b. Coercible a b => a -> b
coerceliftA2 :: (a -> b -> c) -> Max a -> Max b -> Max c
liftA2 =(a -> b -> c) -> Max a -> Max b -> Max c
forall a b. Coercible a b => a -> b
coerce-- | @since 4.9.0.0instanceMonad Max where>> :: Max a -> Max b -> Max b
(>>) =Max a -> Max b -> Max b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>) Max a :: a
a >>= :: Max a -> (a -> Max b) -> Max b
>>= f :: a -> Max b
f =a -> Max b
f a
a -- | @since 4.9.0.0instanceMonadFix Max wheremfix :: (a -> Max a) -> Max a
mfix f :: a -> Max a
f =(Max a -> Max a) -> Max a
forall a. (a -> a) -> a
fix (a -> Max a
f (a -> Max a) -> (Max a -> a) -> Max a -> Max a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Max a -> a
forall a. Max a -> a
getMax )-- | @since 4.9.0.0instanceNum a =>Num (Max a )where(Max a :: a
a )+ :: Max a -> Max a -> Max a
+ (Max b :: a
b )=a -> Max a
forall a. a -> Max a
Max (a
a a -> a -> a
forall a. Num a => a -> a -> a
+ a
b )(Max a :: a
a )* :: Max a -> Max a -> Max a
* (Max b :: a
b )=a -> Max a
forall a. a -> Max a
Max (a
a a -> a -> a
forall a. Num a => a -> a -> a
* a
b )(Max a :: a
a )- :: Max a -> Max a -> Max a
- (Max b :: a
b )=a -> Max a
forall a. a -> Max a
Max (a
a a -> a -> a
forall a. Num a => a -> a -> a
- a
b )negate :: Max a -> Max a
negate (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> a
forall a. Num a => a -> a
negate a
a )abs :: Max a -> Max a
abs (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> a
forall a. Num a => a -> a
abs a
a )signum :: Max a -> Max a
signum (Max a :: a
a )=a -> Max a
forall a. a -> Max a
Max (a -> a
forall a. Num a => a -> a
signum a
a )fromInteger :: Integer -> Max a
fromInteger =a -> Max a
forall a. a -> Max a
Max (a -> Max a) -> (Integer -> a) -> Integer -> Max a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> a
forall a. Num a => Integer -> a
fromInteger -- | '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.dataArg a b =Arg a b deriving(Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)typeArgMin a b =Min (Arg a b )typeArgMax a b =Max (Arg a b )-- | @since 4.9.0.0instanceFunctor (Arg a )wherefmap :: (a -> b) -> Arg a a -> Arg a b
fmap f :: a -> b
f (Arg x :: a
x a :: a
a )=a -> b -> Arg a b
forall a b. a -> b -> Arg a b
Arg a
x (a -> b
f a
a )-- | @since 4.9.0.0instanceFoldable (Arg a )wherefoldMap :: (a -> m) -> Arg a a -> m
foldMap f :: a -> m
f (Arg _a :: a
a )=a -> m
f a
a -- | @since 4.9.0.0instanceTraversable (Arg a )wheretraverse :: (a -> f b) -> Arg a a -> f (Arg a b)
traverse f :: a -> f b
f (Arg x :: a
x a :: a
a )=a -> b -> Arg a b
forall a b. a -> b -> Arg a b
Arg a
x (b -> Arg a b) -> f b -> f (Arg a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a -- | @since 4.9.0.0instanceEqa =>Eq(Arg a b )whereArg a :: a
a _== :: Arg a b -> Arg a b -> Bool
==Arg b :: a
b _=a
a a -> a -> Bool
forall a. Eq a => a -> a -> Bool
==a
b -- | @since 4.9.0.0instanceOrda =>Ord(Arg a b )whereArg a :: a
a _compare :: Arg a b -> Arg a b -> Ordering
`compare`Arg b :: a
b _=a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
comparea
a a
b min :: Arg a b -> Arg a b -> Arg a b
min x :: Arg a b
x @(Arg a :: a
a _)y :: Arg a b
y @(Arg b :: a
b _)|a
a a -> a -> Bool
forall a. Ord a => a -> a -> Bool
<=a
b =Arg a b
x |Bool
otherwise =Arg a b
y max :: Arg a b -> Arg a b -> Arg a b
max x :: Arg a b
x @(Arg a :: a
a _)y :: Arg a b
y @(Arg b :: a
b _)|a
a a -> a -> Bool
forall a. Ord a => a -> a -> Bool
>=a
b =Arg a b
x |Bool
otherwise =Arg a b
y -- | @since 4.9.0.0instanceBifunctor Arg wherebimap :: (a -> b) -> (c -> d) -> Arg a c -> Arg b d
bimap f :: a -> b
f g :: c -> d
g (Arg a :: a
a b :: c
b )=b -> d -> Arg b d
forall a b. a -> b -> Arg a b
Arg (a -> b
f a
a )(c -> d
g c
b )-- | @since 4.10.0.0instanceBifoldable Arg wherebifoldMap :: (a -> m) -> (b -> m) -> Arg a b -> m
bifoldMap f :: a -> m
f g :: b -> m
g (Arg a :: a
a b :: b
b )=a -> m
f a
a m -> m -> m
forall a. Semigroup a => a -> a -> a
<> b -> m
g b
b -- | @since 4.10.0.0instanceBitraversable Arg wherebitraverse :: (a -> f c) -> (b -> f d) -> Arg a b -> f (Arg c d)
bitraverse f :: a -> f c
f g :: b -> f d
g (Arg a :: a
a b :: b
b )=c -> d -> Arg c d
forall a b. a -> b -> Arg a b
Arg (c -> d -> Arg c d) -> f c -> f (d -> Arg c d)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f c
f a
a f (d -> Arg c d) -> f d -> f (Arg c d)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> b -> f d
g b
b -- | Use @'Option' ('First' a)@ to get the behavior of-- 'Data.Monoid.First' from "Data.Monoid".newtypeFirst a =First {First a -> a
getFirst ::a }deriving(Bounded -- ^ @since 4.9.0.0,Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceEnum a =>Enum (First a )wheresucc :: First a -> First a
succ (First a :: a
a )=a -> First a
forall a. a -> First a
First (a -> a
forall a. Enum a => a -> a
succ a
a )pred :: First a -> First a
pred (First a :: a
a )=a -> First a
forall a. a -> First a
First (a -> a
forall a. Enum a => a -> a
pred a
a )toEnum :: Int -> First a
toEnum =a -> First a
forall a. a -> First a
First (a -> First a) -> (Int -> a) -> Int -> First a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum fromEnum :: First a -> Int
fromEnum =a -> Int
forall a. Enum a => a -> Int
fromEnum (a -> Int) -> (First a -> a) -> First a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. First a -> a
forall a. First a -> a
getFirst enumFrom :: First a -> [First a]
enumFrom (First a :: a
a )=a -> First a
forall a. a -> First a
First (a -> First a) -> [a] -> [First a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> [a]
forall a. Enum a => a -> [a]
enumFrom a
a enumFromThen :: First a -> First a -> [First a]
enumFromThen (First a :: a
a )(First b :: a
b )=a -> First a
forall a. a -> First a
First (a -> First a) -> [a] -> [First a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromThen a
a a
b enumFromTo :: First a -> First a -> [First a]
enumFromTo (First a :: a
a )(First b :: a
b )=a -> First a
forall a. a -> First a
First (a -> First a) -> [a] -> [First a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromTo a
a a
b enumFromThenTo :: First a -> First a -> First a -> [First a]
enumFromThenTo (First a :: a
a )(First b :: a
b )(First c :: a
c )=a -> First a
forall a. a -> First a
First (a -> First a) -> [a] -> [First a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> a -> [a]
forall a. Enum a => a -> a -> a -> [a]
enumFromThenTo a
a a
b a
c -- | @since 4.9.0.0instanceSemigroup (First a )wherea :: First a
a <> :: First a -> First a -> First a
<> _=First a
a stimes :: b -> First a -> First a
stimes =b -> First a -> First a
forall b a. Integral b => b -> a -> a
stimesIdempotent -- | @since 4.9.0.0instanceFunctor First wherefmap :: (a -> b) -> First a -> First b
fmap f :: a -> b
f (First x :: a
x )=b -> First b
forall a. a -> First a
First (a -> b
f a
x )-- | @since 4.9.0.0instanceFoldable First wherefoldMap :: (a -> m) -> First a -> m
foldMap f :: a -> m
f (First a :: a
a )=a -> m
f a
a -- | @since 4.9.0.0instanceTraversable First wheretraverse :: (a -> f b) -> First a -> f (First b)
traverse f :: a -> f b
f (First a :: a
a )=b -> First b
forall a. a -> First a
First (b -> First b) -> f b -> f (First b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a -- | @since 4.9.0.0instanceApplicative First wherepure :: a -> First a
pure x :: a
x =a -> First a
forall a. a -> First a
First a
x a :: First a
a <* :: First a -> First b -> First a
<* _=First a
a _*> :: First a -> First b -> First b
*> a :: First b
a =First b
a <*> :: First (a -> b) -> First a -> First b
(<*>) =First (a -> b) -> First a -> First b
forall a b. Coercible a b => a -> b
coerceliftA2 :: (a -> b -> c) -> First a -> First b -> First c
liftA2 =(a -> b -> c) -> First a -> First b -> First c
forall a b. Coercible a b => a -> b
coerce-- | @since 4.9.0.0instanceMonad First where>> :: First a -> First b -> First b
(>>) =First a -> First b -> First b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>) First a :: a
a >>= :: First a -> (a -> First b) -> First b
>>= f :: a -> First b
f =a -> First b
f a
a -- | @since 4.9.0.0instanceMonadFix First wheremfix :: (a -> First a) -> First a
mfix f :: a -> First a
f =(First a -> First a) -> First a
forall a. (a -> a) -> a
fix (a -> First a
f (a -> First a) -> (First a -> a) -> First a -> First a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. First a -> a
forall a. First a -> a
getFirst )-- | Use @'Option' ('Last' a)@ to get the behavior of-- 'Data.Monoid.Last' from "Data.Monoid"newtypeLast a =Last {Last a -> a
getLast ::a }deriving(Bounded -- ^ @since 4.9.0.0,Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceEnum a =>Enum (Last a )wheresucc :: Last a -> Last a
succ (Last a :: a
a )=a -> Last a
forall a. a -> Last a
Last (a -> a
forall a. Enum a => a -> a
succ a
a )pred :: Last a -> Last a
pred (Last a :: a
a )=a -> Last a
forall a. a -> Last a
Last (a -> a
forall a. Enum a => a -> a
pred a
a )toEnum :: Int -> Last a
toEnum =a -> Last a
forall a. a -> Last a
Last (a -> Last a) -> (Int -> a) -> Int -> Last a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum fromEnum :: Last a -> Int
fromEnum =a -> Int
forall a. Enum a => a -> Int
fromEnum (a -> Int) -> (Last a -> a) -> Last a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Last a -> a
forall a. Last a -> a
getLast enumFrom :: Last a -> [Last a]
enumFrom (Last a :: a
a )=a -> Last a
forall a. a -> Last a
Last (a -> Last a) -> [a] -> [Last a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> [a]
forall a. Enum a => a -> [a]
enumFrom a
a enumFromThen :: Last a -> Last a -> [Last a]
enumFromThen (Last a :: a
a )(Last b :: a
b )=a -> Last a
forall a. a -> Last a
Last (a -> Last a) -> [a] -> [Last a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromThen a
a a
b enumFromTo :: Last a -> Last a -> [Last a]
enumFromTo (Last a :: a
a )(Last b :: a
b )=a -> Last a
forall a. a -> Last a
Last (a -> Last a) -> [a] -> [Last a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromTo a
a a
b enumFromThenTo :: Last a -> Last a -> Last a -> [Last a]
enumFromThenTo (Last a :: a
a )(Last b :: a
b )(Last c :: a
c )=a -> Last a
forall a. a -> Last a
Last (a -> Last a) -> [a] -> [Last a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> a -> [a]
forall a. Enum a => a -> a -> a -> [a]
enumFromThenTo a
a a
b a
c -- | @since 4.9.0.0instanceSemigroup (Last a )where_<> :: Last a -> Last a -> Last a
<> b :: Last a
b =Last a
b stimes :: b -> Last a -> Last a
stimes =b -> Last a -> Last a
forall b a. Integral b => b -> a -> a
stimesIdempotent -- | @since 4.9.0.0instanceFunctor Last wherefmap :: (a -> b) -> Last a -> Last b
fmap f :: a -> b
f (Last x :: a
x )=b -> Last b
forall a. a -> Last a
Last (a -> b
f a
x )a :: a
a <$ :: a -> Last b -> Last a
<$ _=a -> Last a
forall a. a -> Last a
Last a
a -- | @since 4.9.0.0instanceFoldable Last wherefoldMap :: (a -> m) -> Last a -> m
foldMap f :: a -> m
f (Last a :: a
a )=a -> m
f a
a -- | @since 4.9.0.0instanceTraversable Last wheretraverse :: (a -> f b) -> Last a -> f (Last b)
traverse f :: a -> f b
f (Last a :: a
a )=b -> Last b
forall a. a -> Last a
Last (b -> Last b) -> f b -> f (Last b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a -- | @since 4.9.0.0instanceApplicative Last wherepure :: a -> Last a
pure =a -> Last a
forall a. a -> Last a
Last a :: Last a
a <* :: Last a -> Last b -> Last a
<* _=Last a
a _*> :: Last a -> Last b -> Last b
*> a :: Last b
a =Last b
a <*> :: Last (a -> b) -> Last a -> Last b
(<*>) =Last (a -> b) -> Last a -> Last b
forall a b. Coercible a b => a -> b
coerceliftA2 :: (a -> b -> c) -> Last a -> Last b -> Last c
liftA2 =(a -> b -> c) -> Last a -> Last b -> Last c
forall a b. Coercible a b => a -> b
coerce-- | @since 4.9.0.0instanceMonad Last where>> :: Last a -> Last b -> Last b
(>>) =Last a -> Last b -> Last b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>) Last a :: a
a >>= :: Last a -> (a -> Last b) -> Last b
>>= f :: a -> Last b
f =a -> Last b
f a
a -- | @since 4.9.0.0instanceMonadFix Last wheremfix :: (a -> Last a) -> Last a
mfix f :: a -> Last a
f =(Last a -> Last a) -> Last a
forall a. (a -> a) -> a
fix (a -> Last a
f (a -> Last a) -> (Last a -> a) -> Last a -> Last a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Last a -> a
forall a. Last a -> a
getLast )-- | 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.newtypeWrappedMonoid m =WrapMonoid {WrappedMonoid m -> m
unwrapMonoid ::m }deriving(Bounded -- ^ @since 4.9.0.0,Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceMonoid m =>Semigroup (WrappedMonoid m )where<> :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m
(<>) =(m -> m -> m)
-> WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m
forall a b. Coercible a b => a -> b
coerce(m -> m -> m
forall a. Monoid a => a -> a -> a
mappend ::m ->m ->m )-- | @since 4.9.0.0instanceMonoid m =>Monoid (WrappedMonoid m )wheremempty :: WrappedMonoid m
mempty =m -> WrappedMonoid m
forall m. m -> WrappedMonoid m
WrapMonoid m
forall a. Monoid a => a
mempty -- | @since 4.9.0.0instanceEnum a =>Enum (WrappedMonoid a )wheresucc :: WrappedMonoid a -> WrappedMonoid a
succ (WrapMonoid a :: a
a )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> a
forall a. Enum a => a -> a
succ a
a )pred :: WrappedMonoid a -> WrappedMonoid a
pred (WrapMonoid a :: a
a )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> a
forall a. Enum a => a -> a
pred a
a )toEnum :: Int -> WrappedMonoid a
toEnum =a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> WrappedMonoid a) -> (Int -> a) -> Int -> WrappedMonoid a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum fromEnum :: WrappedMonoid a -> Int
fromEnum =a -> Int
forall a. Enum a => a -> Int
fromEnum (a -> Int) -> (WrappedMonoid a -> a) -> WrappedMonoid a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WrappedMonoid a -> a
forall m. WrappedMonoid m -> m
unwrapMonoid enumFrom :: WrappedMonoid a -> [WrappedMonoid a]
enumFrom (WrapMonoid a :: a
a )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> [a]
forall a. Enum a => a -> [a]
enumFrom a
a enumFromThen :: WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a]
enumFromThen (WrapMonoid a :: a
a )(WrapMonoid b :: a
b )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromThen a
a a
b enumFromTo :: WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a]
enumFromTo (WrapMonoid a :: a
a )(WrapMonoid b :: a
b )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> [a]
forall a. Enum a => a -> a -> [a]
enumFromTo a
a a
b enumFromThenTo :: WrappedMonoid a
-> WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a]
enumFromThenTo (WrapMonoid a :: a
a )(WrapMonoid b :: a
b )(WrapMonoid c :: a
c )=a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> a -> a -> [a]
forall a. Enum a => a -> a -> a -> [a]
enumFromThenTo a
a a
b a
c -- | 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'.mtimesDefault ::(Integral b ,Monoid a )=>b ->a ->a mtimesDefault :: b -> a -> a
mtimesDefault n :: b
n x :: a
x |b
n b -> b -> Bool
forall a. Eq a => a -> a -> Bool
==0=a
forall a. Monoid a => a
mempty |Bool
otherwise =WrappedMonoid a -> a
forall m. WrappedMonoid m -> m
unwrapMonoid (b -> WrappedMonoid a -> WrappedMonoid a
forall a b. (Semigroup a, Integral b) => b -> a -> a
stimes b
n (a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
WrapMonoid a
x ))-- | '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. It will be-- marked deprecated in GHC 8.8 and removed in GHC 8.10.newtypeOption a =Option {Option a -> Maybe a
getOption ::Maybe a }deriving(Eq-- ^ @since 4.9.0.0,Ord-- ^ @since 4.9.0.0,Show -- ^ @since 4.9.0.0,Read -- ^ @since 4.9.0.0,Data -- ^ @since 4.9.0.0,Generic -- ^ @since 4.9.0.0,Generic1 -- ^ @since 4.9.0.0)-- | @since 4.9.0.0instanceFunctor Option wherefmap :: (a -> b) -> Option a -> Option b
fmap f :: a -> b
f (Option a :: Maybe a
a )=Maybe b -> Option b
forall a. Maybe a -> Option a
Option ((a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f Maybe a
a )-- | @since 4.9.0.0instanceApplicative Option wherepure :: a -> Option a
pure a :: a
a =Maybe a -> Option a
forall a. Maybe a -> Option a
Option (a -> Maybe a
forall a. a -> Maybe a
Just a
a )Option a :: Maybe (a -> b)
a <*> :: Option (a -> b) -> Option a -> Option b
<*> Option b :: Maybe a
b =Maybe b -> Option b
forall a. Maybe a -> Option a
Option (Maybe (a -> b)
a Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe a
b )liftA2 :: (a -> b -> c) -> Option a -> Option b -> Option c
liftA2 f :: a -> b -> c
f (Option x :: Maybe a
x )(Option y :: Maybe b
y )=Maybe c -> Option c
forall a. Maybe a -> Option a
Option ((a -> b -> c) -> Maybe a -> Maybe b -> Maybe c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> b -> c
f Maybe a
x Maybe b
y )Option Nothing *> :: Option a -> Option b -> Option b
*> _=Maybe b -> Option b
forall a. Maybe a -> Option a
Option Maybe b
forall a. Maybe a
Nothing _*> b :: Option b
b =Option b
b -- | @since 4.9.0.0instanceMonad Option whereOption (Just a :: a
a )>>= :: Option a -> (a -> Option b) -> Option b
>>= k :: a -> Option b
k =a -> Option b
k a
a _>>= _=Maybe b -> Option b
forall a. Maybe a -> Option a
Option Maybe b
forall a. Maybe a
Nothing >> :: Option a -> Option b -> Option b
(>>) =Option a -> Option b -> Option b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>) -- | @since 4.9.0.0instanceAlternative Option whereempty :: Option a
empty =Maybe a -> Option a
forall a. Maybe a -> Option a
Option Maybe a
forall a. Maybe a
Nothing Option Nothing <|> :: Option a -> Option a -> Option a
<|> b :: Option a
b =Option a
b a :: Option a
a <|> _=Option a
a -- | @since 4.9.0.0instanceMonadPlus Option -- | @since 4.9.0.0instanceMonadFix Option wheremfix :: (a -> Option a) -> Option a
mfix f :: a -> Option a
f =Maybe a -> Option a
forall a. Maybe a -> Option a
Option ((a -> Maybe a) -> Maybe a
forall (m :: * -> *) a. MonadFix m => (a -> m a) -> m a
mfix (Option a -> Maybe a
forall a. Option a -> Maybe a
getOption (Option a -> Maybe a) -> (a -> Option a) -> a -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Option a
f ))-- | @since 4.9.0.0instanceFoldable Option wherefoldMap :: (a -> m) -> Option a -> m
foldMap f :: a -> m
f (Option (Just m :: a
m ))=a -> m
f a
m foldMap _(Option Nothing )=m
forall a. Monoid a => a
mempty -- | @since 4.9.0.0instanceTraversable Option wheretraverse :: (a -> f b) -> Option a -> f (Option b)
traverse f :: a -> f b
f (Option (Just a :: a
a ))=Maybe b -> Option b
forall a. Maybe a -> Option a
Option (Maybe b -> Option b) -> (b -> Maybe b) -> b -> Option b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Maybe b
forall a. a -> Maybe a
Just (b -> Option b) -> f b -> f (Option b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
a traverse _(Option Nothing )=Option b -> f (Option b)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe b -> Option b
forall a. Maybe a -> Option a
Option Maybe b
forall a. Maybe a
Nothing )-- | Fold an 'Option' case-wise, just like 'maybe'.option ::b ->(a ->b )->Option a ->b option :: b -> (a -> b) -> Option a -> b
option n :: b
n j :: a -> b
j (Option m :: Maybe a
m )=b -> (a -> b) -> Maybe a -> b
forall b a. b -> (a -> b) -> Maybe a -> b
maybe b
n a -> b
j Maybe a
m -- | @since 4.9.0.0instanceSemigroup a =>Semigroup (Option a )where<> :: Option a -> Option a -> Option a
(<>) =(Maybe a -> Maybe a -> Maybe a) -> Option a -> Option a -> Option a
forall a b. Coercible a b => a -> b
coerce(Maybe a -> Maybe a -> Maybe a
forall a. Semigroup a => a -> a -> a
(<>) ::Maybe a ->Maybe a ->Maybe a )
#if !defined(__HADDOCK_VERSION__)
-- workaround https://github.com/haskell/haddock/issues/680stimes_(OptionNothing)=OptionNothingstimesn(Option(Justa))=casecomparen0ofLT->errorWithoutStackTrace"stimes: Option, negative multiplier"EQ->OptionNothingGT->Option(Just(stimesna))
#endif
-- | @since 4.9.0.0instanceSemigroup a =>Monoid (Option a )wheremempty :: Option a
mempty =Maybe a -> Option a
forall a. Maybe a -> Option a
Option Maybe a
forall a. Maybe a
Nothing 

AltStyle によって変換されたページ (->オリジナル) /