Spec-Zone.ru › Haskell 7

Data.Foldable

Авторские права Ross Paterson 2005
Лицензия BSD-стиль (см. файл LICENSE в дистрибутиве)
Поддерживающий libraries@haskell.org
Стабильность экспериментальная
Переносимость переносимая
Safe Haskell Надежная
Язык Haskell2010

Содержание

  • Складывания
    • Специальные смещённые складывания
    • Складывания действий
      • Действия аппликативного типа
      • Действия монадического типа
    • Специализированные складывания
    • Поиски

Описание

Класс структур данных, которые можно сложить в сводное значение.

Складывания

class Foldable t where Исходный код

Структуры данных, которые можно сложить.

Например, дан тип данных

data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)

соответствующим примером будет

instance Foldable Tree where
   foldMap f Empty = mempty
   foldMap f (Leaf x) = f x
   foldMap f (Node l k r) = foldMap f l `mappend` f k `mappend` foldMap f r

Это подходит даже для абстрактных типов, так как предполагается, что моноид удовлетворяет законам моноида. В качестве альтернативы можно определить foldr:

instance Foldable Tree where
   foldr f z Empty = z
   foldr f z (Leaf x) = f x z
   foldr f z (Node l k r) = foldr f (f k (foldr f z r)) l

Foldable примеры ожидают соблюдения следующих законов:

foldr f z t = appEndo (foldMap (Endo . f) t ) z
foldl f z t = appEndo (getDual (foldMap (Dual . Endo . flip f) t)) z
fold = foldMap id

sum, product, maximum, и minimum должны быть по существу эквивалентны foldMap формам, таким как

sum = getSum . foldMap Sum

но могут быть менее определены.

Если тип также является Functor примером, он должен удовлетворять

foldMap f = fold . fmap f

что подразумевает, что

foldMap f . fmap g = foldMap (f . g)

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

foldMap | foldr

Методы

fold :: Monoid m => t m -> m Исходный код

Объединение элементов структуры с использованием моноида.

foldMap :: Monoid m => (a -> m) -> t a -> m Исходный код

Преобразование каждого элемента структуры в моноид и объединение результатов.

foldr :: (a -> b -> b) -> b -> t a -> b Исходный код

Складывание структуры с ассоциативностью справа.

foldr f z = foldr f z . toList

foldr' :: (a -> b -> b) -> b -> t a -> b Исходный код

Складывание структуры с ассоциативностью справа, но со строгим применением оператора.

foldl :: (b -> a -> b) -> b -> t a -> b Исходный код

Складывание структуры с ассоциативностью слева.

foldl f z = foldl f z . toList

foldl' :: (b -> a -> b) -> b -> t a -> b Исходный код

Складывание структуры с ассоциативностью слева, но со строгим применением оператора.

foldl f z = foldl' f z . toList

foldr1 :: (a -> a -> a) -> t a -> a Исходный код

Вариант foldr, у которого нет базового случая, и поэтому он может применяться только к непустым структурам.

foldr1 f = foldr1 f . toList

foldl1 :: (a -> a -> a) -> t a -> a Исходный код

Вариант foldl, у которого нет базового случая, и поэтому он может применяться только к непустым структурам.

foldl1 f = foldl1 f . toList

toList :: t a -> [a] Исходный код

Список элементов структуры слева направо.

null :: t a -> Bool Исходный код

Проверка, является ли структура пустой. По умолчанию реализация оптимизирована для структур, похожих на списки cons, так как нет общего способа сделать лучше.

length :: t a -> Int Исходный код

Возвращает размер/длину конечной структуры в качестве Int. По умолчанию реализация оптимизирована для структур, похожих на списки cons, так как нет общего способа сделать лучше.

elem :: Eq a => a -> t a -> Bool infix 4 Исходный код

Является ли элемент частью структуры?

maximum :: forall a. Ord a => t a -> a Исходный код

Наибольший элемент непустой структуры.

minimum :: forall a. Ord a => t a -> a Исходный код

Наименьший элемент непустой структуры.

sum :: Num a => t a -> a Исходный код

Функция sum вычисляет сумму чисел структуры.

product :: Num a => t a -> a Исходный код

Функция product вычисляет произведение чисел структуры.

Примеры

Foldable []
Foldable Maybe
Foldable Identity
Foldable (Either a)
Foldable ((,) a)
Foldable (Proxy *)
Foldable (Const m)

Специальные смещённые складывания

foldrM :: (Foldable t, Monad m) => (a -> b -> m b) -> b -> t a -> m b Исходный код

Моноидное складывание элементов структуры, ассоциированное справа, т.е. справа налево.

foldlM :: (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b Исходный код

Моноидное складывание элементов структуры, ассоциированное слева, т.е. слева направо.

Складывания действий

Действия аппликативного типа

traverse_ :: (Foldable t, Applicative f) => (a -> f b) -> t a -> f () Исходный код

Преобразование каждого элемента структуры в действие, вычисление этих действий слева направо и игнорирование результатов. Для версии, которая не игнорирует результаты, см. traverse.

for_ :: (Foldable t, Applicative f) => t a -> (a -> f b) -> f () Исходный код

for_ — это traverse_ с переставленными аргументами. Для версии, которая не игнорирует результаты, см. for.

>>> for_ [1..4] print
1
2
3
4

sequenceA_ :: (Foldable t, Applicative f) => t (f a) -> f () Source

Выполните каждое действие в структуре слева направо и игнорируйте результаты. Для версии, которая не игнорирует результаты, см. sequenceA.

asum :: (Foldable t, Alternative f) => t (f a) -> f a Source

Сумма набора действий, обобщающая concat.

id="g:5">Действия с монадами

mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m () Source

Примените к каждому элементу структуры монадическое действие, выполните эти действия слева направо и проигнорируйте результаты. Для версии, которая не игнорирует результаты, см. mapM.

Начиная с base 4.8.0.0, mapM_ это просто traverse_, специализированное для Monad.

forM_ :: (Foldable t, Monad m) => t a -> (a -> m b) -> m () Source

forM_ это mapM_ с переставленными аргументами. Для версии, которая не игнорирует результаты, см. forM.

Начиная с base 4.8.0.0, forM_ это просто for_, специализированное для Monad.

sequence_ :: (Foldable t, Monad m) => t (m a) -> m () Source

Выполните каждое монадическое действие в структуре слева направо и проигнорируйте результаты. Для версии, которая не игнорирует результаты, см. sequence.

Начиная с base 4.8.0.0, sequence_ это просто sequenceA_, специализированное для Monad.

msum :: (Foldable t, MonadPlus m) => t (m a) -> m a Source

Сумма набора действий, обобщающая concat. Начиная с base 4.8.0.0, msum это просто asum, специализированное для MonadPlus.

id="g:6">Специализированные сложения

concat :: Foldable t => t [a] -> [a] Source

Конкатенация всех элементов контейнера списков.

concatMap :: Foldable t => (a -> [b]) -> t a -> [b] Source

Применяет функцию ко всем элементам контейнера и конкатенирует получившиеся списки.

and :: Foldable t => t Bool -> Bool Source

and возвращает конъюнкцию контейнера булевых значений. Для того чтобы результат был True, контейнер должен быть конечным; False, однако, получается из False значения, находящегося на конечном расстоянии слева.

or :: Foldable t => t Bool -> Bool Source

or возвращает дизъюнкцию контейнера булевых значений. Для того чтобы результат был False, контейнер должен быть конечным; True, однако, получается из True значения, находящегося на конечном расстоянии слева.

any :: Foldable t => (a -> Bool) -> t a -> Bool Source

Определяет, удовлетворяет ли какой-либо элемент структуры предикату.

all :: Foldable t => (a -> Bool) -> t a -> Bool Source

Определяет, удовлетворяют ли все элементы структуры предикату.

maximumBy :: Foldable t => (a -> a -> Ordering) -> t a -> a Source

Наибольший элемент непустой структуры относительно заданной функции сравнения.

minimumBy :: Foldable t => (a -> a -> Ordering) -> t a -> a Source

Наименьший элемент непустой структуры относительно заданной функции сравнения.

id="g:7">Поиск

notElem :: (Foldable t, Eq a) => a -> t a -> Bool infix 4 Source

notElem — это отрицание elem.

find :: Foldable t => (a -> Bool) -> t a -> Maybe a Source

Функция find принимает предикат и структуру и возвращает самый левый элемент структуры, соответствующий предикату, или Nothing, если такого элемента нет.

© 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-Foldable.html

Spec-Zone.ru

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