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)
Методы
fold :: Monoid m => t m -> m Исходный код
Объединение элементов структуры с использованием моноида.
foldMap :: Monoid m => (a -> m) -> t a -> m Исходный код
Преобразование каждого элемента структуры в моноид и объединение результатов.
foldr :: (a -> b -> b) -> b -> t a -> b Исходный код
Складывание структуры с ассоциативностью справа.
foldrf z =foldrf z .toList
foldr' :: (a -> b -> b) -> b -> t a -> b Исходный код
Складывание структуры с ассоциативностью справа, но со строгим применением оператора.
foldl :: (b -> a -> b) -> b -> t a -> b Исходный код
Складывание структуры с ассоциативностью слева.
foldlf z =foldlf z .toList
foldl' :: (b -> a -> b) -> b -> t a -> b Исходный код
Складывание структуры с ассоциативностью слева, но со строгим применением оператора.
foldlf z =foldl'f z .toList
foldr1 :: (a -> a -> a) -> t a -> a Исходный код
Вариант foldr, у которого нет базового случая, и поэтому он может применяться только к непустым структурам.
foldr1f =foldr1f .toList
foldl1 :: (a -> a -> a) -> t a -> a Исходный код
Вариант foldl, у которого нет базового случая, и поэтому он может применяться только к непустым структурам.
foldl1f =foldl1f .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 вычисляет произведение чисел структуры.
Примеры
Специальные смещённые складывания
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] print1 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
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