Data.Semigroup
| Авторские права | (C) 2011-2015 Edward Kmett |
|---|---|
| Лицензия | BSD-стиль (см. файл LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | предварительная |
| Переносимость | переносимая |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Описание
Тип a является Semigroup, если он предоставляет ассоциативную функцию (<>), которая позволяет объединить любые два значения типа a в одно. Где ассоциативность означает, что следующее должно всегда выполняться:
>>> (a <> b) <> c == a <> (b <> c)
Примеры
Инстанс Min Semigroup для Int определён так, чтобы всегда выбирать меньшее число: >>> Min 1 <> Min 2 <> Min 3 <> Min 4 :: Min Int Min {getMin = 1}
Если нам нужно объединить несколько значений, мы можем использовать функцию sconcat, чтобы сделать это. Однако нам нужно гарантировать, что у нас есть хотя бы одно значение для работы, поскольку в противном случае результат будет неопределённым. Именно по этой причине sconcat использует Data.List.NonEmpty.NonEmpty — список, который никогда не может быть пустым:
>>> (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
Вооружённые этим гарантированно непустым типом данных, мы можем объединить значения с помощью sconcat и выбранным нами Semigroup инстансом Int, который выбирает наименьшее или наибольшее число соответственно:
>>> sconcat (1 :| [2, 3, 4]) :: Min Int
Min {getMin = 1}
>>> sconcat (1 :| [2, 3, 4]) :: Max Int
Max {getMax = 4}
Конкатенация строк — ещё один пример инстанса Semigroup:
>>> "foo" <> "bar" "foobar"
Полугруппа — обобщение моноида. Однако в отличие от моноида, полугруппа требует наличия нейтрального элемента (mempty). Требование нейтрального элемента препятствует тому, чтобы многие типы были полными моноидами, например, Data.List.NonEmpty.NonEmpty.
Обратите внимание, что использование (<>) в этом модуле конфликтует с оператором с тем же именем, который экспортируется Data.Monoid. Однако этот пакет переэкспортирует (большую часть) содержимого Data.Monoid, так что для использования полугрупп и моноидов в одном пакете просто
import Data.Semigroup
С момента: base-4.9.0.0
class Semigroup a where Источник
Класс полугрупп (типов с ассоциативной бинарной операцией).
Инстансы должны удовлетворять следующим условиям:
С момента: base-4.9.0.0
Минимальное полное определение
Методы
(<>) :: a -> a -> a infixr 6 Источник
Ассоциативная операция.
>>> [1,2,3] <> [4,5,6] [1,2,3,4,5,6]
sconcat :: NonEmpty a -> a Источник
Приведение непустого списка с помощью <>
Значение по умолчанию должно быть достаточным, но его можно переопределить для повышения эффективности.
>>> import Data.List.NonEmpty >>> sconcat $ "Hello" :| [" ", "Haskell", "!"] "Hello Haskell!"
stimes :: Integral b => b -> a -> a Источник
Повторение значения n раз.
Так как это работает с полугруппой, она может вернуть ошибку, если вы запросите 0 или меньше повторений, и значение по умолчанию так и сделает.
Делая это членом класса, идемпотентные полугруппы и моноиды могут повысить производительность до \(\mathcal{O}(1)\), выбрав stimes = stimesIdempotent или stimes =
stimesIdempotentMonoid соответственно.
>>> stimes 4 [1] [1,1,1,1]
Экземпляры
Определено в GHC.Base Методы(<>) :: [a] -> [a] -> [a] Исходный код sconcat :: NonEmpty [a] -> [a] Исходный код stimes :: Integral b => b -> [a] -> [a] Исходный код | |
| Semigroup a => Semigroup (Maybe a) | С: base-4.9.0.0 |
| Semigroup a => Semigroup (IO a) | С: base-4.10.0.0 |
| Semigroup p => Semigroup (Par1 p) | С: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: Par1 p -> Par1 p -> Par1 p Исходный код sconcat :: NonEmpty (Par1 p) -> Par1 p Исходный код stimes :: Integral b => b -> Par1 p -> Par1 p Исходный код | |
| Semigroup (NonEmpty a) | С: base-4.9.0.0 |
| Semigroup a => Semigroup (Down a) | С: base-4.11.0.0 |
| Num a => Semigroup (Product a) | С: base-4.9.0.0 |
Определено в Data.Semigroup.Internal Методы(<>) :: Product a -> Product a -> Product a Исходный код sconcat :: NonEmpty (Product a) -> Product a Исходный код stimes :: Integral b => b -> Product a -> Product a Исходный код | |
| Num a => Semigroup (Sum a) | Since: base-4.9.0.0 |
| Semigroup (Endo a) | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Dual a) | Since: base-4.9.0.0 |
| Semigroup (Last a) | Since: base-4.9.0.0 |
| Semigroup (First a) | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Identity a) | Since: base-4.9.0.0 |
| Semigroup a => Semigroup (Option a) | Since: base-4.9.0.0 |
Определено в GHC.Generics Методы(<>) :: U1 p -> U1 p -> U1 p Исходный код sconcat :: NonEmpty (U1 p) -> U1 p Исходный код stimes :: Integral b => b -> U1 p -> U1 p Исходный код | |
| (Semigroup a, Semigroup b) => Semigroup (a, b) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b) -> (a, b) -> (a, b) Исходный код sconcat :: NonEmpty (a, b) -> (a, b) Исходный код stimes :: Integral b0 => b0 -> (a, b) -> (a, b) Исходный код | |
| Semigroup a => Semigroup (ST s a) | С момента: base-4.11.0.0 |
| Semigroup (Proxy s) | С момента: base-4.9.0.0 |
Определено в Data.Proxy Методы(<>) :: Proxy s -> Proxy s -> Proxy s Исходный код sconcat :: NonEmpty (Proxy s) -> Proxy s Исходный код stimes :: Integral b => b -> Proxy s -> Proxy s Исходный код | |
| Semigroup a => Semigroup (Op a b) | |
Определено в Data.Functor.Contravariant Методы(<>) :: Op a b -> Op a b -> Op a b Исходный код sconcat :: NonEmpty (Op a b) -> Op a b Исходный код stimes :: Integral b0 => b0 -> Op a b -> Op a b Исходный код | |
| Semigroup (f p) => Semigroup (Rec1 f p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: Rec1 f p -> Rec1 f p -> Rec1 f p Исходный код sconcat :: NonEmpty (Rec1 f p) -> Rec1 f p Исходный код stimes :: Integral b => b -> Rec1 f p -> Rec1 f p Исходный код | |
| (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c) -> (a, b, c) -> (a, b, c) Исходный код sconcat :: NonEmpty (a, b, c) -> (a, b, c) Исходный код stimes :: Integral b0 => b0 -> (a, b, c) -> (a, b, c) Исходный код | |
| Alternative f => Полугруппа (Alt f a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup.Internal Методы(<>) :: Alt f a -> Alt f a -> Alt f a Исходный код sconcat :: NonEmpty (Alt f a) -> Alt f a Исходный код stimes :: Integral b => b -> Alt f a -> Alt f a Исходный код | |
| (Applicative f, Полугруппа a) => Полугруппа (Ap f a) | С момента: base-4.12.0.0 |
Определено в Data.Monoid Методы(<>) :: Ap f a -> Ap f a -> Ap f a Исходный код sconcat :: NonEmpty (Ap f a) -> Ap f a Исходный код stimes :: Integral b => b -> Ap f a -> Ap f a Исходный код | |
| Полугруппа a => Полугруппа (Const a b) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Const Методы(<>) :: Const a b -> Const a b -> Const a b Исходный код sconcat :: NonEmpty (Const a b) -> Const a b Исходный код stimes :: Integral b0 => b0 -> Const a b -> Const a b Исходный код | |
| Полугруппа c => Полугруппа (K1 i c p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: K1 i c p -> K1 i c p -> K1 i c p Исходный код sconcat :: NonEmpty (K1 i c p) -> K1 i c p Исходный код stimes :: Integral b => b -> K1 i c p -> K1 i c p Исходный код | |
| (Полугруппа (f p), Полугруппа (g p)) => Полугруппа ((f :*: g) p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Исходный код sconcat :: NonEmpty ((f :*: g) p) -> (f :*: g) p Исходный код stimes :: Integral b => b -> (f :*: g) p -> (f :*: g) p Исходный код | |
| (Полугруппа a, Полугруппа b, Полугруппа c, Полугруппа d) => Полугруппа (a, b, c, d) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Исходный код sconcat :: NonEmpty (a, b, c, d) -> (a, b, c, d) Исходный код stimes :: Integral b0 => b0 -> (a, b, c, d) -> (a, b, c, d) Исходный код | |
| Полугруппа (f p) => Полугруппа (M1 i c f p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: M1 i c f p -> M1 i c f p -> M1 i c f p Исходный код sconcat :: NonEmpty (M1 i c f p) -> M1 i c f p Исходный код stimes :: Integral b => b -> M1 i c f p -> M1 i c f p Исходный код | |
| Semigroup (f (g p)) => Semigroup ((f :.: g) p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Исходный код sconcat :: NonEmpty ((f :.: g) p) -> (f :.: g) p Исходный код stimes :: Integral b => b -> (f :.: g) p -> (f :.: g) p Исходный код | |
| (Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) | С версии: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Исходный код sconcat :: NonEmpty (a, b, c, d, e) -> (a, b, c, d, e) Исходный код stimes :: Integral b0 => b0 -> (a, b, c, d, e) -> (a, b, c, d, e) Исходный код | |
stimesMonoid :: (Integral b, Monoid a) => b -> a -> a Исходный код
Это допустимое определение stimes для Monoid.
В отличие от стандартного определения stimes, оно определено для 0 и поэтому предпочтительнее, где это возможно.
stimesIdempotent :: Integral b => b -> a -> a Исходный код
Это допустимое определение stimes для идемпотентного Semigroup.
Когда x <> x = x, это определение следует предпочитать, так как оно работает в \(\mathcal{O}(1)\), а не в \(\mathcal{O}(\log n)\).
stimesIdempotentMonoid :: (Integral b, Monoid a) => b -> a -> a Исходный код
Это допустимое определение stimes для идемпотентного Monoid.
Когда mappend x x = x, это определение следует предпочитать, так как оно работает в \(\mathcal{O}(1)\), а не в \(\mathcal{O}(\log n)\)
mtimesDefault :: (Integral b, Monoid a) => b -> a -> a Исходный код
Повторите значение n раз.
mtimesDefault n a = a <> a <> ... <> a -- using <> (n-1) times
Реализовано с помощью stimes и mempty.
Это подходящее определение для члена mtimes из Monoid.
Полугруппы
newtype Min a Исходный код
Примеры использования
| Monad Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методы(>>=) :: Min a -> (a -> Min b) -> Min b Исходный код (>>) :: Min a -> Min b -> Min b Исходный код return :: a -> Min a Исходный код | |
| Functor Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup | |
| MonadFix Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыmfix :: (a -> Min a) -> Min a Исходный код | |
| Applicative Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Min a Исходный код (<*>) :: Min (a -> b) -> Min a -> Min b Исходный код liftA2 :: (a -> b -> c) -> Min a -> Min b -> Min c Исходный код (*>) :: Min a -> Min b -> Min b Исходный код (<*) :: Min a -> Min b -> Min a Исходный код | |
| Foldable Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыfold :: Monoid m => Min m -> m Исходный код foldMap :: Monoid m => (a -> m) -> Min a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> Min a -> m Исходный код foldr :: (a -> b -> b) -> b -> Min a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Min a -> b Исходный код foldl :: (b -> a -> b) -> b -> Min a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Min a -> b Исходный код foldr1 :: (a -> a -> a) -> Min a -> a Исходный код foldl1 :: (a -> a -> a) -> Min a -> a Исходный код toList :: Min a -> [a] Исходный код null :: Min a -> Bool Исходный код length :: Min a -> Int Исходный код elem :: Eq a => a -> Min a -> Bool Исходный код maximum :: Ord a => Min a -> a Исходный код minimum :: Ord a => Min a -> a Исходный код sum :: Num a => Min a -> a Исходный код product :: Num a => Min a -> a Исходный код | |
| Traversable Min | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыtraverse :: Applicative f => (a -> f b) -> Min a -> f (Min b) Исходный код sequenceA :: Applicative f => Min (f a) -> f (Min a) Исходный код mapM :: Monad m => (a -> m b) -> Min a -> m (Min b) Исходный код sequence :: Monad m => Min (m a) -> m (Min a) Исходный код | |
| Bounded a => Bounded (Min a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Enum a => Enum (Min a) | С момента: base-4.9.0.0 |
| Eq a => Eq (Min a) | С версии: base-4.9.0.0 |
| Data a => Data (Min a) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Краткое описание методовgfoldl :: (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 dataTypeOf :: Min a -> DataType 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) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методы(<>) :: Min a -> Min a -> Min a Исходный код sconcat :: NonEmpty (Min a) -> Min a Исходный код stimes :: Integral b => b -> Min a -> Min a Исходный код | |
| (Ord a, Bounded a) => Monoid (Min a) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыmempty :: Min a Исходный код mappend :: Min a -> Min a -> Min a Исходный код mconcat :: [Min a] -> Min a Исходный код | |
| Generic1 Min | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Связанные типыtype Rep1 Min :: k -> Type Исходный код Методыfrom1 :: forall (a :: k). Min a -> Rep1 Min a Исходный код to1 :: forall (a :: k). Rep1 Min a -> Min a Исходный код | |
| type Rep (Min a) | |
Определено в Data.Semigroup | |
| type Rep1 Min | |
Определено в Data.Semigroup | |
newtype Max a Исходный код
Примеры использования
| Monad Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методы(>>=) :: Max a -> (a -> Max b) -> Max b Исходный код (>>) :: Max a -> Max b -> Max b Исходный код return :: a -> Max a Исходный код | |
| Functor Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| MonadFix Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыmfix :: (a -> Max a) -> Max a Исходный код | |
| Applicative Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Max a Исходный код (<*>) :: Max (a -> b) -> Max a -> Max b Исходный код liftA2 :: (a -> b -> c) -> Max a -> Max b -> Max c Исходный код (*>) :: Max a -> Max b -> Max b Исходный код (<*) :: Max a -> Max b -> Max a Исходный код | |
| Foldable Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыfold :: Monoid m => Max m -> m Исходный код foldMap :: Monoid m => (a -> m) -> Max a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> Max a -> m Исходный код foldr :: (a -> b -> b) -> b -> Max a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Max a -> b Исходный код foldl :: (b -> a -> b) -> b -> Max a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Max a -> b Исходный код foldr1 :: (a -> a -> a) -> Max a -> a Исходный код foldl1 :: (a -> a -> a) -> Max a -> a Исходный код toList :: Max a -> [a] Исходный код null :: Max a -> Bool Исходный код length :: Max a -> Int Исходный код elem :: Eq a => a -> Max a -> Bool Исходный код maximum :: Ord a => Max a -> a Исходный код minimum :: Ord a => Max a -> a Исходный код sum :: Num a => Max a -> a Исходный код product :: Num a => Max a -> a Исходный код | |
| Traversable Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыtraverse :: Applicative f => (a -> f b) -> Max a -> f (Max b) Исходный код sequenceA :: Applicative f => Max (f a) -> f (Max a) Исходный код mapM :: Monad m => (a -> m b) -> Max a -> m (Max b) Исходный код sequence :: Monad m => Max (m a) -> m (Max a) Исходный код | |
| Bounded a => Bounded (Max a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Enum a => Enum (Max a) | С момента: base-4.9.0.0 |
| Eq a => Eq (Max a) | Since: base-4.9.0.0 |
| Data a => Data (Max a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Методыgfoldl :: (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 dataTypeOf :: Max a -> DataType 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 |
Определено в Data.Semigroup Методы(<>) :: Max a -> Max a -> Max a Исходный код sconcat :: NonEmpty (Max a) -> Max a Исходный код stimes :: Integral b => b -> Max a -> Max a Исходный код | |
| (Ord a, Bounded a) => Monoid (Max a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыmempty :: Max a Исходный код mappend :: Max a -> Max a -> Max a Исходный код mconcat :: [Max a] -> Max a Исходный код | |
| Generic1 Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Связанные типыtype Rep1 Max :: k -> Type Исходный код Методыfrom1 :: forall (a :: k). Max a -> Rep1 Max a Исходный код to1 :: forall (a :: k). Rep1 Max a -> Max a Исходный код | |
| type Rep (Max a) | |
Определено в Data.Semigroup | |
| type Rep1 Max | |
Определено в Data.Semigroup | |
newtype First a Исходный код
Используйте Option (First a) для получения поведения First из Data.Monoid.
Примеры использования
| Monad First | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методы(>>=) :: First a -> (a -> First b) -> First b Исходный код (>>) :: First a -> First b -> First b Исходный код return :: a -> First a Исходный код | |
| Functor First | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыfmap :: (a -> b) -> First a -> First b Исходный код (<$) :: a -> First b -> First a Исходный код | |
| MonadFix First | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыmfix :: (a -> First a) -> First a Исходный код | |
| Applicative First | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> First a Исходный код (<*>) :: First (a -> b) -> First a -> First b Исходный код liftA2 :: (a -> b -> c) -> First a -> First b -> First c Исходный код (*>) :: First a -> First b -> First b Исходный код (<*) :: First a -> First b -> First a Исходный код | |
| Foldable First | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыfold :: Monoid m => First m -> m Исходный код foldMap :: Monoid m => (a -> m) -> First a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> First a -> m Исходный код foldr :: (a -> b -> b) -> b -> First a -> b Исходный код foldr' :: (a -> b -> b) -> b -> First a -> b Исходный код foldl :: (b -> a -> b) -> b -> First a -> b Исходный код foldl' :: (b -> a -> b) -> b -> First a -> b Исходный код foldr1 :: (a -> a -> a) -> First a -> a Исходный код foldl1 :: (a -> a -> a) -> First a -> a Исходный код toList :: First a -> [a] Исходный код null :: First a -> Bool Исходный код length :: First a -> Int Исходный код elem :: Eq a => a -> First a -> Bool Исходный код maximum :: Ord a => First a -> a Исходный код minimum :: Ord a => First a -> a Исходный код sum :: Num a => First a -> a Исходный код product :: Num a => First a -> a Исходный код | |
| Traversable First | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыtraverse :: Applicative f => (a -> f b) -> First a -> f (First b) Исходный код sequenceA :: Applicative f => First (f a) -> f (First a) Исходный код mapM :: Monad m => (a -> m b) -> First a -> m (First b) Исходный код sequence :: Monad m => First (m a) -> m (First a) Исходный код | |
| Bounded a => Bounded (First a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Enum a => Enum (First a) | С момента: base-4.9.0.0 |
Defined in Data.Semigroup Методыsucc :: First a -> First a Source pred :: First a -> First a Source toEnum :: Int -> 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 |
| Data a => Data (First a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup Методыgfoldl :: (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 toConstr :: First a -> Constr Source dataTypeOf :: First a -> DataType 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 |
Определено в Data.Semigroup Связанные типытип Rep1 First :: k -> Тип Исходный код Методыfrom1 :: forall (a :: k). First a -> Rep1 First a Исходный код to1 :: forall (a :: k). Rep1 First a -> First a Исходный код | |
| type Rep (First a) | |
Определено в Data.Semigroup | |
| тип Rep1 First | |
Определено в Data.Semigroup | |
новый тип Last a Исходный код
Используйте Option (Last a) для получения поведения Last из Data.Monoid
Определено в Data.Semigroup Методыfold :: Monoid m => Last m -> m Исходный код foldMap :: Monoid m => (a -> m) -> Last a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> Last a -> m Исходный код foldr :: (a -> b -> b) -> b -> Last a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Last a -> b Исходный код foldl :: (b -> a -> b) -> b -> Last a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Last a -> b Исходный код foldr1 :: (a -> a -> a) -> Last a -> a Исходный код foldl1 :: (a -> a -> a) -> Last a -> a Исходный код toList :: Last a -> [a] Исходный код null :: Last a -> Bool Исходный код length :: Last a -> Int Исходный код elem :: Eq a => a -> Last a -> Bool Исходный код maximum :: Ord a => Last a -> a Исходный код minimum :: Ord a => Last a -> a Исходный код sum :: Num a => Last a -> a Исходный код product :: Num a => Last a -> a Исходный код | |
| Traversable Last | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыtraverse :: Applicative f => (a -> f b) -> Last a -> f (Last b) Исходный код sequenceA :: Applicative f => Last (f a) -> f (Last a) Исходный код mapM :: Monad m => (a -> m b) -> Last a -> m (Last b) Исходный код sequence :: Monad m => Last (m a) -> m (Last a) Исходный код | |
| Bounded a => Bounded (Last a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Enum a => Enum (Last a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Краткое описание методовsucc :: 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 |
| Data a => Data (Last a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Краткое описание методовgfoldl :: (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 toConstr :: Last a -> Constr Source dataTypeOf :: Last a -> DataType 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 |
Определено в Data.Semigroup Связанные типыtype Rep1 Last :: k -> Тип Исходный код Методыfrom1 :: forall (a :: k). Last a -> Rep1 Last a Исходный код to1 :: forall (a :: k). Rep1 Last a -> Last a Исходный код | |
| type Rep (Last a) | |
Определено в Data.Semigroup | |
| type Rep1 Last | |
Определено в Data.Semigroup | |
newtype ОборачивающийМоноид m Исходный код
Предоставляет Semigroup для произвольного Моноида.
ПРИМЕЧАНИЕ: Это больше не нужно, так как Semigroup стал суперклассом Monoid в base-4.11, и этот новый тип может быть устаревшим в будущем.
Конструкторы
| WrapMonoid | |
Поля
| |
Примеры реализации
| Bounded m => Bounded (WrappedMonoid m) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| Enum a => Enum (WrappedMonoid a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыsucc :: WrappedMonoid a -> WrappedMonoid a Источник pred :: WrappedMonoid a -> WrappedMonoid a Источник toEnum :: Int -> WrappedMonoid a Источник fromEnum :: WrappedMonoid a -> Int Источник enumFrom :: WrappedMonoid a -> [WrappedMonoid a] Источник enumFromThen :: WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a] Источник enumFromTo :: WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a] Источник enumFromThenTo :: WrappedMonoid a -> WrappedMonoid a -> WrappedMonoid a -> [WrappedMonoid a] Источник | |
| Eq m => Eq (WrappedMonoid m) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методы(==) :: WrappedMonoid m -> WrappedMonoid m -> Bool Источник (/=) :: WrappedMonoid m -> WrappedMonoid m -> Bool Источник | |
| Data m => Data (WrappedMonoid m) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыgfoldl :: (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 toConstr :: WrappedMonoid m -> Constr Source dataTypeOf :: WrappedMonoid m -> DataType 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) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup Методыcompare :: WrappedMonoid m -> WrappedMonoid m -> Ordering Source (<) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source (<=) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source (>) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source (>=) :: WrappedMonoid m -> WrappedMonoid m -> Bool Source max :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source min :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source | |
| Read m => Read (WrappedMonoid m) | С версии: base-4.9.0.0 |
Определено в 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))) | |
| type Rep1 WrappedMonoid | |
Определено в 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)) | |
Переэкспортированные моноиды из Data.Monoid
Двойник Monoid, полученный путём перестановки аргументов mappend.
>>> getDual (mappend (Dual "Hello") (Dual "World")) "WorldHello"
Определено в Data.Foldable Методыfold :: Monoid m => Dual m -> m Исходный код foldMap :: Monoid m => (a -> m) -> Dual a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> Dual a -> m Исходный код foldr :: (a -> b -> b) -> b -> Dual a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Dual a -> b Исходный код foldl :: (b -> a -> b) -> b -> Dual a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Dual a -> b Исходный код foldr1 :: (a -> a -> a) -> Dual a -> a Исходный код foldl1 :: (a -> a -> a) -> Dual a -> a Исходный код toList :: Dual a -> [a] Исходный код null :: Dual a -> Bool Исходный код length :: Dual a -> Int Исходный код elem :: Eq a => a -> Dual a -> Bool Исходный код maximum :: Ord a => Dual a -> a Исходный код minimum :: Ord a => Dual a -> a Исходный код sum :: Num a => Dual a -> a Исходный код product :: Num a => Dual a -> a Исходный код | |
| Traversable Dual | С: base-4.8.0.0 |
Определено в Data.Traversable Методыtraverse :: Applicative f => (a -> f b) -> Dual a -> f (Dual b) Исходный код sequenceA :: Applicative f => Dual (f a) -> f (Dual a) Исходный код mapM :: Monad m => (a -> m b) -> Dual a -> m (Dual b) Исходный код sequence :: Monad m => Dual (m a) -> m (Dual a) Исходный код | |
| MonadZip Dual | С: base-4.8.0.0 |
Определено в Control.Monad.Zip Методыmzip :: Dual a -> Dual b -> Dual (a, b) Исходный код mzipWith :: (a -> b -> c) -> Dual a -> Dual b -> Dual c Исходный код munzip :: Dual (a, b) -> (Dual a, Dual b) Исходный код | |
| Bounded a => Bounded (Dual a) | С: base-2.1 |
Определено в Data.Semigroup.Internal | |
| Eq a => Eq (Dual a) | С: base-2.1 |
| Data a => Data (Dual a) | Since: base-4.8.0.0 |
Определено в Data.Data Краткое описание методовgfoldl :: (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 toConstr :: Dual a -> Constr Source dataTypeOf :: Dual a -> DataType 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 |
Определено в Data.Semigroup.Internal | |
| Read a => Read (Dual a) | Since: base-2.1 |
Определено в Data.Semigroup.Internal | |
| тип Rep1 Dual | |
Определено в Data.Semigroup.Internal | |
Моноид эндоморфизмов относительно композиции.
>>> let computation = Endo ("Hello, " ++) <> Endo (++ "!")
>>> appEndo computation "Haskell"
"Hello, Haskell!"
Экземпляры
Булевый моноид по отношению к конъюнкции (&&).
>>> getAll (All True <> mempty <> All False) False
>>> getAll (mconcat (map (\x -> All (even x)) [2,4,6,7,8])) False
Экземпляры
| Bounded All | Since: base-2.1 |
| Eq All | Since: base-2.1 |
| Data All | Since: base-4.8.0.0 |
Определено в Data.Data Методыgfoldl :: (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 toConstr :: All -> Constr Source dataTypeOf :: All -> DataType 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 | |
| Ord All | Since: base-2.1 |
Определено в Data.Semigroup.Internal |
Булевый моноид при дизъюнкции (||).
>>> getAny (Any True <> mempty <> Any False) True
>>> getAny (mconcat (map (\x -> Any (even x)) [2,4,6,7,8])) True
Экземпляры
| Bounded Any | Since: base-2.1 |
| Eq Any | Since: base-2.1 |
| Data Any | Since: base-4.8.0.0 |
Определено в Data.Data Методыgfoldl :: (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 toConstr :: Any -> Constr Source dataTypeOf :: Any -> DataType 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 | |
| Ord Any | Since: base-2.1 |
Определено в Data.Semigroup.Internal |
Моноид относительно сложения.
>>> getSum (Sum 1 <> Sum 2 <> mempty) 3
Определено в Data.Foldable Методыfold :: Monoid m => Sum m -> m Исходный код foldMap :: Monoid m => (a -> m) -> Sum a -> m Исходный код foldMap' :: Monoid m => (a -> m) -> Sum a -> m Исходный код foldr :: (a -> b -> b) -> b -> Sum a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Sum a -> b Исходный код foldl :: (b -> a -> b) -> b -> Sum a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Sum a -> b Исходный код foldr1 :: (a -> a -> a) -> Sum a -> a Исходный код foldl1 :: (a -> a -> a) -> Sum a -> a Исходный код toList :: Sum a -> [a] Исходный код null :: Sum a -> Bool Исходный код length :: Sum a -> Int Исходный код elem :: Eq a => a -> Sum a -> Bool Исходный код maximum :: Ord a => Sum a -> a Исходный код minimum :: Ord a => Sum a -> a Исходный код sum :: Num a => Sum a -> a Исходный код product :: Num a => Sum a -> a Исходный код | |
| Traversable Sum | С момента: base-4.8.0.0 |
Определено в Data.Traversable Методыtraverse :: Applicative f => (a -> f b) -> Sum a -> f (Sum b) Исходный код sequenceA :: Applicative f => Sum (f a) -> f (Sum a) Исходный код mapM :: Monad m => (a -> m b) -> Sum a -> m (Sum b) Исходный код sequence :: Monad m => Sum (m a) -> m (Sum a) Исходный код | |
| MonadZip Sum | С момента: base-4.8.0.0 |
Определено в Control.Monad.Zip Методыmzip :: Sum a -> Sum b -> Sum (a, b) Исходный код mzipWith :: (a -> b -> c) -> Sum a -> Sum b -> Sum c Исходный код munzip :: Sum (a, b) -> (Sum a, Sum b) Исходный код | |
| Bounded a => Bounded (Sum a) | С момента: base-2.1 |
Определено в Data.Semigroup.Internal | |
| Eq a => Eq (Sum a) | С момента: base-2.1 |
| Data a => Data (Sum a) | Since: base-4.8.0.0 |
Defined in Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Sum a -> c (Sum a) Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Sum a) Source toConstr :: Sum a -> Constr Source dataTypeOf :: Sum a -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Sum a)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Sum a)) Source gmapT :: (forall b. Data b => b -> b) -> Sum a -> Sum a Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Sum a -> r Source gmapQ :: (forall d. Data d => d -> u) -> Sum a -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> Sum a -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Sum a -> m (Sum a) Source | |
| Num a => Num (Sum a) | Since: base-4.7.0.0 |
| Ord a => Ord (Sum a) | Since: base-2.1 |
| Generic1 Sum | Since: base-4.7.0.0 |
Определено в Data.Semigroup.Internal Связанные типыtype Rep1 Sum :: k -> Type Исходный код Методыfrom1 :: forall (a :: k). Sum a -> Rep1 Sum a Исходный код to1 :: forall (a :: k). Rep1 Sum a -> Sum a Исходный код | |
| type Rep (Sum a) | |
Определено в Data.Semigroup.Internal | |
| type Rep1 Sum | |
Определено в Data.Semigroup.Internal | |
newtype Product a Исходный код
Моноид по отношению к умножению.
>>> getProduct (Product 3 <> Product 4 <> mempty) 12
Конструкторы
| Product | |
Поля
| |
Примеры реализации
| Monad Product | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методы(>>=) :: Product a -> (a -> Product b) -> Product b Исходный код (>>) :: Product a -> Product b -> Product b Исходный код return :: a -> Product a Исходный код | |
| Functor Product | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методыfmap :: (a -> b) -> Product a -> Product b Исходный код (<$) :: a -> Product b -> Product a Исходный код | |
| MonadFix Product | С момента: base-4.8.0.0 |
Определено в Control.Monad.Fix Методыmfix :: (a -> Product a) -> Product a Исходный код | |
| Applicative Product | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методыpure :: a -> Product a Исходный код (<*>) :: Product (a -> b) -> Product a -> Product b Исходный код liftA2 :: (a -> b -> c) -> Product a -> Product b -> Product c Исходный код (*>) :: Product a -> Product b -> Product b Исходный код (<*) :: Product a -> Product b -> Product a Исходный код | |
| Foldable Product | С момента: base-4.8.0.0 |
Определено в Data.Foldable Методыfold :: Monoid m => Product m -> m Источник foldMap :: Monoid m => (a -> m) -> Product a -> m Источник foldMap' :: Monoid m => (a -> m) -> Product a -> m Источник foldr :: (a -> b -> b) -> b -> Product a -> b Источник foldr' :: (a -> b -> b) -> b -> Product a -> b Источник foldl :: (b -> a -> b) -> b -> Product a -> b Источник foldl' :: (b -> a -> b) -> b -> Product a -> b Источник foldr1 :: (a -> a -> a) -> Product a -> a Источник foldl1 :: (a -> a -> a) -> Product a -> a Источник toList :: Product a -> [a] Источник null :: Product a -> Bool Источник length :: Product a -> Int Источник elem :: Eq a => a -> Product a -> Bool Источник maximum :: Ord a => Product a -> a Источник minimum :: Ord a => Product a -> a Источник | |
| Traversable Product | С момента: base-4.8.0.0 |
Определено в Data.Traversable | |
| MonadZip Product | С момента: base-4.8.0.0 |
| Bounded a => Bounded (Product a) | С момента: base-2.1 |
| Eq a => Eq (Product a) | С момента: base-2.1 |
| Data a => Data (Product a) | Since: base-4.8.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Product a -> c (Product a) Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Product a) Source toConstr :: Product a -> Constr Source dataTypeOf :: Product a -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Product a)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Product a)) Source gmapT :: (forall b. Data b => b -> b) -> Product a -> Product a Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Product a -> r Source gmapQ :: (forall d. Data d => d -> u) -> Product a -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> Product a -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Product a -> m (Product a) Source | |
| Num a => Num (Product a) | Since: base-4.7.0.0 |
Определено в Data.Semigroup.Internal Методы(+) :: Product a -> Product a -> Product a Source (-) :: Product a -> Product a -> Product a Source (*) :: Product a -> Product a -> Product a Source negate :: Product a -> Product a Source abs :: Product a -> Product a Source signum :: Product a -> Product a Source fromInteger :: Integer -> Product a Source | |
| Ord a => Ord (Product a) | Since: base-2.1 |
Определено в Data.Semigroup.Internal Методыmempty :: Product a Исходный код mappend :: Product a -> Product a -> Product a Исходный код mconcat :: [Product a] -> Product a Исходный код | |
| Generic1 Product | С версии: base-4.7.0.0 |
Определено в Data.Semigroup.Internal Связанные типыtype Rep1 Product :: k -> Type Исходный код Методыfrom1 :: forall (a :: k). Product a -> Rep1 Product a Исходный код to1 :: forall (a :: k). Rep1 Product a -> Product a Исходный код | |
| type Rep (Product a) | |
Определено в Data.Semigroup.Internal | |
| type Rep1 Product | |
Определено в Data.Semigroup.Internal | |
Более подходящий моноид для Maybe
newtype Option a Исходный код
Option фактически Maybe с лучшим экземпляром Monoid, построенным на основе базового Semigroup вместо базового Monoid.
В идеале, этот тип вообще не существовал бы, и мы просто исправили бы экземпляр Monoid типа Maybe.
В GHC 8.4 и более поздних версиях экземпляр Monoid для Maybe был исправлен для подъёма экземпляра Semigroup вместо экземпляра Monoid. Вследствие этого, этот тип больше не нужен. Он будет помечен как устаревший в GHC 8.8 и удалён в GHC 8.10.
Определено в Data.Semigroup Методыfold :: Monoid m => Option m -> m Источник foldMap :: Monoid m => (a -> m) -> Option a -> m Источник foldMap' :: Monoid m => (a -> m) -> Option a -> m Источник foldr :: (a -> b -> b) -> b -> Option a -> b Источник foldr' :: (a -> b -> b) -> b -> Option a -> b Источник foldl :: (b -> a -> b) -> b -> Option a -> b Источник foldl' :: (b -> a -> b) -> b -> Option a -> b Источник foldr1 :: (a -> a -> a) -> Option a -> a Источник foldl1 :: (a -> a -> a) -> Option a -> a Источник toList :: Option a -> [a] Источник null :: Option a -> Bool Источник length :: Option a -> Int Источник elem :: Eq a => a -> Option a -> Bool Источник maximum :: Ord a => Option a -> a Источник minimum :: Ord a => Option a -> a Источник | |
| Traversable Option | С момента: base-4.9.0.0 |
Определено в Data.Semigroup | |
| MonadPlus Option | С момента: base-4.9.0.0 |
| Alternative Option | С момента: base-4.9.0.0 |
| Eq a => Eq (Option a) | С момента: base-4.9.0.0 |
| Data a => Data (Option a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Краткое описание методовgfoldl :: (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 toConstr :: Option a -> Constr Source dataTypeOf :: Option a -> DataType 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 |
Определено в Data.Semigroup | |
| Read a => Read (Option a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup | |
| type Rep1 Option | |
Определено в Data.Semigroup | |
option :: b -> (a -> b) -> Option a -> b Исходный код
Складывает по случаям, как и Option.
Списки различий для полугруппы
diff :: Semigroup m => m -> Endo m Исходный код
Это позволяет использовать список различий для Semigroup как Monoid.
cycle1 :: Semigroup m => m -> m Исходный код
Обобщение cycle на произвольную Semigroup. Может не завершиться для некоторых значений в некоторых полугруппах.
ArgMin, ArgMax
data Arg a b Исходный код
Arg сам по себе не является Semigroup, но его можно поместить в Min и Max для вычисления arg min или arg max.
Конструкторы
| Arg a b |
Экземпляры
| Bifunctor Arg | Since: base-4.9.0.0 |
| Bifoldable Arg | Since: base-4.10.0.0 |
| Bitraversable Arg | Since: base-4.10.0.0 |
Определено в Data.Semigroup Методыbitraverse :: 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 |
| Foldable (Arg a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Методыfold :: 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 | |
| Traversable (Arg a) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Методыtraverse :: Applicative f => (a0 -> f b) -> Arg a a0 -> f (Arg a b) Исходный код sequenceA :: Applicative f => Arg a (f a0) -> f (Arg a a0) Исходный код mapM :: Monad m => (a0 -> m b) -> Arg a a0 -> m (Arg a b) Исходный код sequence :: Monad m => Arg a (m a0) -> m (Arg a a0) Исходный код | |
| Generic1 (Arg a :: Тип -> Тип) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Связанные типыtype Rep1 (Arg a) :: k -> Тип Исходный код Методыfrom1 :: forall (a0 :: k). Arg a a0 -> Rep1 (Arg a) a0 Исходный код to1 :: forall (a0 :: k). Rep1 (Arg a) a0 -> Arg a a0 Исходный код | |
| Eq a => Eq (Arg a b) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Методы(==) :: Arg a b -> Arg a b -> Bool Исходный код (/=) :: Arg a b -> Arg a b -> Bool Исходный код | |
| (Data a, Data b) => Data (Arg a b) | Since: base-4.9.0.0 |
Определено в Data.Semigroup Методыgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Arg a b -> c (Arg a b) Исходный код gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Arg a b) Исходный код toConstr :: Arg a b -> Constr Исходный код dataTypeOf :: Arg a b -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Arg a b)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Arg a b)) Исходный код gmapT :: (forall b0. Data b0 => b0 -> b0) -> Arg a b -> Arg a b Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arg a b -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arg a b -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> Arg a b -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> Arg a b -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Arg a b -> m (Arg a b) Исходный код | |
| Ord a => Ord (Arg a b) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыcompare :: Arg a b -> Arg a b -> Ordering Исходный код (<) :: Arg a b -> Arg a b -> Bool Исходный код (<=) :: Arg a b -> Arg a b -> Bool Исходный код (>) :: Arg a b -> Arg a b -> Bool Исходный код (>=) :: Arg a b -> Arg a b -> Bool Исходный код max :: Arg a b -> Arg a b -> Arg a b Исходный код min :: Arg a b -> Arg a b -> Arg a b Исходный код | |
| (Read a, Read b) => Read (Arg a b) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup МетодыreadsPrec :: Int -> ReadS (Arg a b) Исходный код readList :: ReadS [Arg a b] Исходный код readPrec :: ReadPrec (Arg a b) Исходный код readListPrec :: ReadPrec [Arg a b] Исходный код | |
| (Show a, Show b) => Show (Arg a b) | Since: base-4.9.0.0 |
| Generic (Arg a b) | Since: base-4.9.0.0 |
| type Rep1 (Arg a :: Type -> Type) | |
Определено в 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) | |
Определено в 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))) | |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Semigroup.html