Data.Bifoldable
| Авторские права | (C) 2011-2016 Edward Kmett |
|---|---|
| Лицензия | BSD-стиль (см. файл LICENSE) |
| Поддерживающий | libraries@haskell.org |
| Устойчивость | предварительная |
| Переносимость | переносимая |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
С момента: base-4.10.0.0
class Bifoldable p where Исходный код
Bifoldable определяет структуры, допускающие сгибание, с двумя различными типами элементов (в отличие от Foldable, имеющей один тип элемента). Типичные примеры — Either и (,):
instance Bifoldable Either where bifoldMap f _ (Left a) = f a bifoldMap _ g (Right b) = g b instance Bifoldable (,) where bifoldr f g z (a, b) = f a (g b z)
Минимальное Bifoldable определение состоит либо из bifoldMap либо из bifoldr. При определении большего набора необходимо убедиться, что выполняются следующие тождества:
bifold ≡ bifoldMap id id bifoldMap f g ≡ bifoldr (mappend . f) (mappend . g) mempty bifoldr f g z t ≡ appEndo (bifoldMap (Endo . f) (Endo . g) t) z
Если тип также является Bifunctor экземпляром, он должен удовлетворять:
bifoldMap f g ≡ bifold . bimap f g
что подразумевает
bifoldMap f g . bimap h i ≡ bifoldMap (f . h) (g . i)
С момента: base-4.10.0.0
Методы
bifold :: Monoid m => p m m -> m Исходный код
Объединяет элементы структуры, используя моноид.
bifold ≡ bifoldMap id id
С момента: base-4.10.0.0
bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> p a b -> m Исходный код
Объединяет элементы структуры, задавая способы сопоставления их с общим моноидом.
bifoldMap f g ≡ bifoldr (mappend . f) (mappend . g) mempty
С момента: base-4.10.0.0
bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> p a b -> c Исходный код
Объединяет элементы структуры в правоассоциативном порядке. Учитывая гипотетическую функцию toEitherList :: p a b -> [Either a b], генерирующую список всех элементов структуры в порядке, выполнялось бы следующее:
bifoldr f g z ≡ foldr (either f g) z . toEitherList
С момента: base-4.10.0.0
bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> p a b -> c Исходный код
Объединяет элементы структуры в левоассоциативном порядке. Учитывая гипотетическую функцию toEitherList :: p a b -> [Either a b], генерирующую список всех элементов структуры в порядке, выполнялось бы следующее:
bifoldl f g z ≡ foldl (acc -> either (f acc) (g acc)) z . toEitherList
Обратите внимание, что если вам нужна эффективная левая свертка, вы, вероятно, захотите использовать bifoldl' вместо bifoldl. Причина в том, что последняя не принуждает "внутренние" результаты, что приводит к цепочке отложенных вычислений, которая затем должна быть вычислена снаружи-внутрь.
С момента: base-4.10.0.0
Экземпляры
| Bifoldable Either | С версии: base-4.10.0.0 |
| Bifoldable (,) | С версии: base-4.10.0.0 |
| Bifoldable Arg | С версии: base-4.10.0.0 |
| Bifoldable ((,,) x) | С версии: base-4.10.0.0 |
| Bifoldable (Const :: Type -> Type -> Type) | С версии: base-4.10.0.0 |
| Bifoldable (K1 i :: Type -> Type -> Type) | С версии: base-4.10.0.0 |
| Bifoldable ((,,,) x y) | Since: base-4.10.0.0 |
Defined in Data.Bifoldable | |
| Bifoldable ((,,,,) x y z) | Since: base-4.10.0.0 |
Defined in Data.Bifoldable | |
| Bifoldable ((,,,,,) x y z w) | Since: base-4.10.0.0 |
Defined in Data.Bifoldable Методыbifold :: Monoid m => (x, y, z, w, m, m) -> m Source bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (x, y, z, w, a, b) -> m Source bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (x, y, z, w, a, b) -> c Source bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (x, y, z, w, a, b) -> c Source | |
| Bifoldable ((,,,,,,) x y z w v) | Since: base-4.10.0.0 |
Defined in Data.Bifoldable Методыbifold :: Monoid m => (x, y, z, w, v, m, m) -> m Source bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (x, y, z, w, v, a, b) -> m Source bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (x, y, z, w, v, a, b) -> c Source bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (x, y, z, w, v, a, b) -> c Source | |
bifoldr' :: Bifoldable t => (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c Source
Как bifoldr, но строгое в результате функций редукции на каждом шаге.
Since: base-4.10.0.0
bifoldr1 :: Bifoldable t => (a -> a -> a) -> t a a -> a Source
Вариант bifoldr, который не имеет базового случая и, таким образом, может применяться только к непустым структурам.
Since: base-4.10.0.0
bifoldrM :: (Bifoldable t, Monad m) => (a -> c -> m c) -> (b -> c -> m c) -> c -> t a b -> m c Source
Правоассоциативная монадическая бисборка над структурой.
Since: base-4.10.0.0
bifoldl' :: Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a Source
Как bifoldl, но строгое в результате функций редукции на каждом шаге.
Это гарантирует, что каждый шаг бисборки принуждается к слабой головной нормальной форме перед применением, избегая накопления замыканий, которые в противном случае произошли бы. Это часто то, что вы хотите строго свести конечную структуру к одному монолитному результату (например, bilength).
Since: base-4.10.0.0
bifoldl1 :: Bifoldable t => (a -> a -> a) -> t a a -> a Source
Вариант bifoldl, который не имеет базового случая и, таким образом, может применяться только к непустым структурам.
Since: base-4.10.0.0
bifoldlM :: (Bifoldable t, Monad m) => (a -> b -> m a) -> (a -> c -> m a) -> a -> t b c -> m a Source
Левоассоциативная монадическая бисборка над структурой.
Since: base-4.10.0.0
bitraverse_ :: (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () Source
Сопоставить каждый элемент структуры, используя одно из двух действий, вычислить эти действия слева направо и игнорировать результаты. За версией, которая не игнорирует результаты, см. bitraverse.
Since: base-4.10.0.0
bifor_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () Source
Как bitraverse_, но со структурой в качестве основного аргумента. Для версии, которая не игнорирует результаты, см. bifor.
>>> > bifor_ ('a', "bc") print (print . reverse)
'a'
"cb"
С момента: base-4.10.0.0
bimapM_ :: (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () Source
Псевдоним для bitraverse_.
С момента: base-4.10.0.0
biforM_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () Source
Псевдоним для bifor_.
С момента: base-4.10.0.0
bimsum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a Source
Псевдоним для biasum.
С момента: base-4.10.0.0
bisequenceA_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () Source
Псевдоним для bisequence_.
С момента: base-4.10.0.0
bisequence_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () Source
Выполняет каждое действие в структуре слева направо и игнорирует результаты. Для версии, которая не игнорирует результаты, см. bisequence.
С момента: base-4.10.0.0
biasum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a Source
Сумма набора действий, обобщающая biconcat.
С момента: base-4.10.0.0
biList :: Bifoldable t => t a a -> [a] Source
Собирает список элементов структуры слева направо.
С момента: base-4.10.0.0
binull :: Bifoldable t => t a b -> Bool Source
Проверяет, пуста ли структура.
С момента: base-4.10.0.0
bilength :: Bifoldable t => t a b -> Int Source
Возвращает размер/длину конечной структуры как Int.
С момента: base-4.10.0.0
bielem :: (Bifoldable t, Eq a) => a -> t a a -> Bool Source
Является ли элемент присутствующим в структуре?
С момента: base-4.10.0.0
bimaximum :: forall t a. (Bifoldable t, Ord a) => t a a -> a Source
Наибольший элемент непустой структуры.
С момента: base-4.10.0.0
biminimum :: forall t a. (Bifoldable t, Ord a) => t a a -> a Source
Наименьший элемент непустой структуры.
С момента: base-4.10.0.0
bisum :: (Bifoldable t, Num a) => t a a -> a Source
Функция bisum вычисляет сумму чисел в структуре.
С момента: base-4.10.0.0
biproduct :: (Bifoldable t, Num a) => t a a -> a Source
Функция biproduct вычисляет произведение чисел в структуре.
С момента: base-4.10.0.0
biconcat :: Bifoldable t => t [a] [a] -> [a] Source
Преобразует структуру списков в конкатенацию этих списков.
С момента: base-4.10.0.0
biconcatMap :: Bifoldable t => (a -> [c]) -> (b -> [c]) -> t a b -> [c] Source
Если задан способ отображения элементов структуры в списки, вычисляет конкатенацию всех таких списков в порядке следования.
С момента: base-4.10.0.0
biand :: Bifoldable t => t Bool Bool -> Bool Source
biand возвращает конъюнкцию контейнера булевых значений. Для получения True, контейнер должен быть конечным; False, однако, результаты из False значения, находящегося на конечном расстоянии слева.
С момента: base-4.10.0.0
bior :: Bifoldable t => t Bool Bool -> Bool Source
bior возвращает дизъюнкцию контейнера булевых значений. Для получения False, контейнер должен быть конечным; True, однако, результаты из True значения, находящегося на конечном расстоянии слева.
С момента: base-4.10.0.0
biany :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool Source
Определяет, удовлетворяет ли любой элемент структуры соответствующему аргументу предиката.
С момента: base-4.10.0.0
biall :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool Source
Определяет, удовлетворяют ли все элементы структуры соответствующему аргументу предиката.
С момента: base-4.10.0.0
bimaximumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a Source
Наибольший элемент непустой структуры относительно заданной функции сравнения.
Since: base-4.10.0.0
biminimumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a Source
Наименьший элемент непустой структуры относительно заданной функции сравнения.
Since: base-4.10.0.0
binotElem :: (Bifoldable t, Eq a) => a -> t a a -> Bool Source
binotElem — это отрицание bielem.
Since: base-4.10.0.0
bifind :: Bifoldable t => (a -> Bool) -> t a a -> Maybe a Source
Функция bifind принимает предикат и структуру и возвращает самый левый элемент структуры, удовлетворяющий предикату, или Nothing, если такого элемента нет.
Since: base-4.10.0.0
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Bifoldable.html