Spec-Zone.ru › Haskell 7

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
  • Bool wrappers
  • Num wrappers
  • Maybe wrappers
  • Alternative wrapper

Описание

Класс для моноидов (типы с ассоциативной бинарной операцией, имеющей единицу) с различными универсальными экземплярами.

Monoid typeclass

class Monoid a where Source

Класс моноидов (типы с ассоциативной бинарной операцией, имеющей единицу). Экземпляры должны удовлетворять следующим законам:

  • mappend mempty x = x
  • mappend x mempty = x
  • mappend x (mappend y z) = mappend (mappend x y) z
  • mconcat = foldr mappend mempty

Имена методов относятся к моноиду списков при конкатенации, но есть много других экземпляров.

Некоторые типы можно рассматривать как моноид более чем одним способом, например, как сложение, так и умножение чисел. В таких случаях мы часто определяем newtypes и делаем эти экземпляры Monoid, например, Sum и Product.

Минимальное полное определение

mempty, mappend

Методы

mempty :: a Source

Единица mappend

mappend :: a -> a -> a Source

Ассоциативная операция

mconcat :: [a] -> a Source

Сворачивает список, используя моноид. Для большинства типов будет использовано определение по умолчанию для mconcat, но функция включена в определение класса, чтобы можно было предоставить оптимизированную версию для конкретных типов.

Экземпляры

Monoid Ordering
Monoid ()
Monoid Any
Monoid All
Monoid Lifetime

mappend == elSupremum

Monoid Event
Monoid [a]
Monoid a => Monoid (Maybe a)

Поднимает полугруппу в Maybe, образуя Monoid согласно http://en.wikipedia.org/wiki/Monoid: "Любая полугруппа S может быть превращена в моноид простым добавлением элемента e не в S и определением e*e = e и e*s = s = s*e для всех s ∈ S." Поскольку нет класса типов "Semigroup", предоставляющего только mappend, мы используем Monoid вместо этого.

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

newtype Dual a Source

Дуал Monoid, полученный путем перестановки аргументов mappend.

Конструкторы

Dual

Поля

getDual :: a

Экземпляры

Generic1 Dual
Bounded a => Bounded (Dual a)
Eq a => Eq (Dual a)
Ord a => Ord (Dual a)
Read a => Read (Dual a)
Show a => Show (Dual a)
Generic (Dual a)
Monoid a => Monoid (Dual a)
type Rep1 Dual
type Rep (Dual a)

newtype Endo a Source

Моноид эндоморфизмов при композиции.

Конструкторы

Endo

Поля

appEndo :: a -> a

Экземпляры

Generic (Endo a)
Monoid (Endo a)
type Rep (Endo a)

Bool обёртки

newtype All Source

Булевый моноид при конъюнкции (&&).

Конструкторы

All

Поля

getAll :: Bool

Экземпляры

Bounded All
Eq All
Ord All
Read All
Show All
Generic All
Monoid All
type Rep All

newtype Any Source

Булевый моноид при дизъюнкции (||).

Конструкторы

Any

Поля

getAny :: Bool

Экземпляры

Bounded Any
Eq Any
Ord Any
Read Any
Show Any
Generic Any
Monoid Any
type Rep Any

Num обёртки

newtype Sum a Source

Моноид при сложении.

Конструкторы

Sum

Поля

getSum :: a

Экземпляры

Generic1 Sum
Bounded a => Bounded (Sum a)
Eq a => Eq (Sum a)
Num a => Num (Sum a)
Ord a => Ord (Sum a)
Read a => Read (Sum a)
Show a => Show (Sum a)
Generic (Sum a)
Num a => Monoid (Sum a)
type Rep1 Sum
type Rep (Sum a)

newtype Product a Source

Моноид при умножении.

Конструкторы

Product

Поля

getProduct :: a

Экземпляры

Generic1 Product
Bounded a => Bounded (Product a)
Eq a => Eq (Product a)
Num a => Num (Product a)
Ord a => Ord (Product a)
Read a => Read (Product a)
Show a => Show (Product a)
Generic (Product a)
Num a => Monoid (Product a)
type Rep1 Product
type Rep (Product a)

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))

newtype First a Source

Maybe моноид, возвращающий самое левое значение, не равное Nothing.

First a изоморфно Alt Maybe a, но предшествует ему исторически.

Конструкторы

First

Поля

getFirst :: Maybe a

Примеры реализации

Monad First
Functor First
Applicative First
Generic1 First
Eq a => Eq (First a)
Ord a => Ord (First a)
Read a => Read (First a)
Show a => Show (First a)
Generic (First a)
Monoid (First a)
type Rep1 First
type Rep (First a)

newtype Last a Source

Maybe моноид, возвращающий правое крайнее значение, отличное от Nothing.

Last a изоморфен Dual (First a), и, следовательно, Dual (Alt Maybe a)

Конструкторы

Last

Поля

getLast :: Maybe a

Примеры реализации

Monad Last
Functor Last
Applicative Last
Generic1 Last
Eq a => Eq (Last a)
Ord a => Ord (Last a)
Read a => Read (Last a)
Show a => Show (Last a)
Generic (Last a)
Monoid (Last a)
type Rep1 Last
type Rep (Last a)

Alternative обертка

newtype Alt f a Source

Моноид по <|>

С момента: 4.8.0.0

Конструкторы

Alt

Поля

getAlt :: f a

Примеры реализации

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API