Главная » Haskell » Модуль Monoid

0

Служебный модуль Monoid содержит определение класса Monoid и нескольких вспомогательных типов для работы со стандартными типами данных. Этот модуль разработан в соответствии с положениями работы [10]. Использование:

import  Monoid

Главная программная сущность этого модуля — класс Monoid, представляющий собой описание одного из важнейших понятий теории категорий — моноида.  Класс:  Monoid

Описание: интерфейс к типам данных, которые можно представить в виде моноида (понятие из теории категорий). Все экземпляры этого класса должны безусловно выполнять законы, определённые теорией для моноидов.

Определение:

class Monoid  a where mempty  ::  a

mappend  :: a  ->  a ->  a mconcat :: [a]  ->  a

Метод mempty является функцией тождества относительно метода  mappend. Другими  словами, метод mempty возвращает  единичный  элемент слева относительно операции моноида. Также  и метод  mappend представляет  собой именно операцию моноида, которая должна быть ассоциативной. Эти два метода являются обязательными для определения в любом экземпляре.

Метод mconcat сворачивает список значений при помощи моноида. Для большинства экземпляров можно пользоваться определением этого метода по умолчанию. Однако в случае необходимости  можно определить более оптимальную  реализацию метода.

Для  класса Monoid определены  экземпляры следующих типов:  All,  Any, ByteString (строгий и ленивый варианты), IntSet, Ordering,  () (а также кортежи размером от 1 до 5), (->),  Dual, Endo, IntMap, Product,  Seq, Set, Sum, Map и [].

Тип: Dual

Описание: комоноид (дуальный к моноиду тип), получаемый обращением аргументов метода mappend.

Определение:

newtype Dual  a

=  Dual  {

getDual  :: a

}

Для этого типа определён экземпляр только класса Monoid.

Тип: Endo

Описание: моноид эндоморфизмов над композициями. Ассоциативной операцией моноида является операция композиции  (.)  для  функций.  Единицей является функция тождества id (см. стр. 137).

Определение:

newtype  Endo  a

=  Endo  {

appEndo :: (a  ->  a)

}

Для этого типа определён экземпляр только класса Monoid.

Тип: All

Описание: булевский моноид над конъюнкцией.  Ассоциативной  операцией является конъюнкция (&&)  над булевскими значениями  истинности. Единицей — значение True.

Определение:

newtype All

=  All  {

getAll :: Bool

}

Для  этого типа  определены  экземпляры следующих типов:  Bounded, Eq,

Monoid, Ord, Read и Show.

Тип: Any

Описание: булевский моноид над дизъюнкцией. Ассоциативной  операцией является дизъюнкция (||)  над булевскими значениями  истинности. Единицей — значение False.

Определение:

newtype  Any

=  Any  {

getAny  :: Bool

}

Для  этого типа  определены  экземпляры следующих типов:  Bounded, Eq,

Monoid, Ord, Read и Show.

Тип: Sum

Описание: моноид над сложением. Ассоциативной операцией является операция сложения (+) в полугруппе чисел. Единицей  — значение 0.

Определение:

newtype Sum  a

=  Sum  {

getSum :: a

}

Для  этого типа  определены  экземпляры следующих типов:  Bounded, Eq,

Monoid, Ord, Read и Show.

Тип: Product

Описание: моноид над умножением. Ассоциативной  операцией является операция умножения (*) в полугруппе чисел. Единицей  — значение 1.

Определение:

newtype Product  a

=  Product  {

getProduct :: a

}

Для  этого типа  определены  экземпляры следующих типов:  Bounded, Eq,

Monoid, Ord, Read и Show.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии