Data.Monoid
| Copyright | (c) Andy Gill 2001, (c) Oregon Graduate Institute of Science and Technology, 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Описание
Класс для моноидов (типы с ассоциативной бинарной операцией, имеющей единицу) с различными универсальными экземплярами.
Monoid typeclass
Класс моноидов (типы с ассоциативной бинарной операцией, имеющей единицу). Экземпляры должны удовлетворять следующим законам:
mappend mempty x = x
mappend x mempty = x
mappend x (mappend y z) = mappend (mappend x y) z
mconcat =
foldrmappend mempty
Имена методов относятся к моноиду списков при конкатенации, но есть много других экземпляров.
Некоторые типы можно рассматривать как моноид более чем одним способом, например, как сложение, так и умножение чисел. В таких случаях мы часто определяем newtypes и делаем эти экземпляры Monoid, например, Sum и Product.
Методы
Единица mappend
Ассоциативная операция
Сворачивает список, используя моноид. Для большинства типов будет использовано определение по умолчанию для mconcat, но функция включена в определение класса, чтобы можно было предоставить оптимизированную версию для конкретных типов.
Экземпляры
| Monoid Ordering | |
| Monoid () | |
| Monoid Any | |
| Monoid All | |
| Monoid Lifetime |
|
| Monoid Event | |
| Monoid [a] | |
| Monoid a => Monoid (Maybe a) | Поднимает полугруппу в |
| Monoid (Last a) | |
| Monoid (First a) | |
| Num a => Monoid (Product a) | |
| Num a => Monoid (Sum a) | |
| Monoid (Endo a) | |
| Monoid a => Monoid (Dual a) | |
| Monoid b => Monoid (a -> b) | |
| (Monoid a, Monoid b) => Monoid (a, b) | |
| Monoid (Proxy k s) | |
| Monoid a => Monoid (Const a b) | |
| (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) | |
| Alternative f => Monoid (Alt * f a) | |
| (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) | |
| (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) |
(<>) :: Monoid m => m -> m -> m infixr 6 Source
Синоним infix для mappend.
Since: 4.5.0.0
Дуал Monoid, полученный путем перестановки аргументов mappend.
Экземпляры
Моноид эндоморфизмов при композиции.
Bool обёртки
Булевый моноид при конъюнкции (&&).
Булевый моноид при дизъюнкции (||).
Num обёртки
Моноид при сложении.
Экземпляры
Моноид при умножении.
Конструкторы
| Product | |
Поля
| |
Экземпляры
Maybe обёртки
Для реализации find или findLast на любом Foldable:
findLast :: Foldable t => (a -> Bool) -> t a -> Maybe a
findLast pred = getLast . foldMap (x -> if pred x
then Last (Just x)
else Last Nothing)
Большая часть интерфейса Data.Map может быть реализована с помощью Data.Map.alter. Часть остального может быть реализована с помощью новой функции alterA и либо First, либо Last:
alterA :: (Applicative f, Ord k) =>
(Maybe a -> f (Maybe a)) -> k -> Map k a -> f (Map k a)
instance Monoid a => Applicative ((,) a) -- from Control.Applicative
insertLookupWithKey :: Ord k => (k -> v -> v -> v) -> k -> v
-> Map k v -> (Maybe v, Map k v)
insertLookupWithKey combine key value =
Arrow.first getFirst . alterA doChange key
where
doChange Nothing = (First Nothing, Just value)
doChange (Just oldValue) =
(First (Just oldValue),
Just (combine key value oldValue))
Maybe моноид, возвращающий самое левое значение, не равное Nothing.
First a изоморфно Alt Maybe a, но предшествует ему исторически.
Примеры реализации
Maybe моноид, возвращающий правое крайнее значение, отличное от Nothing.
Last a изоморфен Dual (First a), и, следовательно, Dual (Alt Maybe a)
Примеры реализации
Alternative обертка
Моноид по <|>
С момента: 4.8.0.0
Примеры реализации
| Monad f => Monad (Alt * f) | |
| Functor f => Functor (Alt * f) | |
| Applicative f => Applicative (Alt * f) | |
| Generic1 (Alt * f) | |
| MonadPlus f => MonadPlus (Alt * f) | |
| Alternative f => Alternative (Alt * f) | |
| Enum (f a) => Enum (Alt k f a) | |
| Eq (f a) => Eq (Alt k f a) | |
| Num (f a) => Num (Alt k f a) | |
| Ord (f a) => Ord (Alt k f a) | |
| Read (f a) => Read (Alt k f a) | |
| Show (f a) => Show (Alt k f a) | |
| Generic (Alt k f a) | |
| Alternative f => Monoid (Alt * f a) | |
| type Rep1 (Alt k f) | |
| type Rep (Alt k f a) |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Data-Monoid.html