Spec-Zone.ru › Haskell 9

Data.Bifoldable

Авторские права (C) 2011-2016 Edward Kmett
Лицензия BSD-стиль (см. файл LICENSE)
Поддерживающий libraries@haskell.org
Стабильность предварительная
Переносимость переносимая
Safe Haskell Безопасный
Язык Haskell2010

Описание

С тех пор: base-4.10.0.0

class Bifoldable (p :: Type -> Type -> Type) 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)

В некоторых примерах ниже также используется BiList для демонстрации поведения пустых Bifoldable, когда это уместно (Either и (,) содержат всегда соответственно ровно 1 и 2 элемента):

data BiList a b = BiList [a] [b]

instance Bifoldable BiList where
  bifoldr f g z (BiList as bs) = foldr f (foldr g z bs) as

Минимальное 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

Если тип также является экземпляром Foldable, то он должен удовлетворять (с учётом лени):

bifoldl const ≡ foldl
bifoldr (flip const) ≡ foldr
bifoldMap (const mempty) ≡ foldMap

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

bifoldMap f g ≡ bifold . bimap f g

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

bifoldMap f g . bimap h i ≡ bifoldMap (f . h) (g . i)

С тех пор: base-4.10.0.0

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

bifoldr | bifoldMap

Методы

bifold :: Monoid m => p m m -> m Исходный код

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

bifold ≡ bifoldMap id id
Примеры
Развернуть

Базовое использование:

>>> bifold (Right [1, 2, 3])
[1,2,3]
>>> bifold (Left [5, 6])
[5,6]
>>> bifold ([1, 2, 3], [4, 5])
[1,2,3,4,5]
>>> bifold (Product 6, Product 7)
Product {getProduct = 42}
>>> bifold (Sum 6, Sum 7)
Sum {getSum = 13}

С тех пор: 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
Примеры
Развернуть

Базовое использование:

>>> bifoldMap (take 3) (fmap digitToInt) ([1..], "89")
[1,2,3,8,9]
>>> bifoldMap (take 3) (fmap digitToInt) (Left [1..])
[1,2,3]
>>> bifoldMap (take 3) (fmap digitToInt) (Right "89")
[8,9]

С тех пор: 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
Примеры
Развернуть

Базовое использование:

> bifoldr (+) (*) 3 (5, 7)
26 -- 5 + (7 * 3)

> bifoldr (+) (*) 3 (7, 5)
22 -- 7 + (5 * 3)

> bifoldr (+) (*) 3 (Right 5)
15 -- 5 * 3

> bifoldr (+) (*) 3 (Left 5)
8 -- 5 + 3

С тех пор: 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

Обратите внимание, что если вам нужен эффективный левый fold, вы, вероятно, захотите использовать bifoldl' вместо bifoldl. Причина в том, что последняя не форсирует «внутренние» результаты, что приводит к цепочке ленивых вычислений, которые затем должны быть вычислены снаружи вовнутрь.

Примеры
Развернуть

Базовое использование:

> bifoldl (+) (*) 3 (5, 7)
56 -- (5 + 3) * 7

> bifoldl (+) (*) 3 (7, 5)
50 -- (7 + 3) * 5

> bifoldl (+) (*) 3 (Right 5)
15 -- 5 * 3

> bifoldl (+) (*) 3 (Left 5)
8 -- 5 + 3

С тех пор: base-4.10.0.0

Экземпляры
Подробности об экземплярах
Bifoldable Arg Источник

С версии: base-4.10.0.0

Подробности об экземпляре

Определено в Data.Semigroup

Методы

bifold :: Monoid m => Arg m m -> m Источник

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> Arg a b -> m Источник

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> Arg a b -> c Источник

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> Arg a b -> c Источник

Bifoldable Either Источник

С версии: base-4.10.0.0

Подробности об экземпляре

Определено в Data.Bifoldable

Методы

bifold :: Monoid m => Either m m -> m Источник

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> Either a b -> m Источник

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> Either a b -> c Источник

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> Either a b -> c Источник

Bifoldable (,) Источник

Законы класса для кортежей выполняются только с учетом ленивости. Методы Bifoldable более ленивы, чем их аналоги в Foldable. Например, закон bifoldr (flip const) ≡ foldr не выполняется для кортежей, если используется ленивость:

>>> bifoldr (flip const) (:) [] (undefined :: (Int, Word)) `seq` ()
()
>>> foldr (:) [] (errorWithoutStackTrace "error!" :: (Int, Word)) `seq` ()
*** Exception: error!

С версии: base-4.10.0.0

Подробности об экземпляре

Определено в Data.Bifoldable

Методы

bifold :: Monoid m => (m, m) -> m Источник

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (a, b) -> m Источник

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (a, b) -> c Источник

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (a, b) -> c Источник

Bifoldable (Const :: Type -> Type -> Type) Источник

С версии: base-4.10.0.0

Подробности об экземпляре

Определено в Data.Bifoldable

Методы

bifold :: Monoid m => Const m m -> m Источник

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> Const a b -> m Источник

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> Const a b -> c Источник

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> Const a b -> c Источник

Bifoldable ((,,) x) Источник

С версии: base-4.10.0.0

Подробности об экземпляре

Определено в Data.Bifoldable

Методы

bifold :: Monoid m => (x, m, m) -> m Источник

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (x, a, b) -> m Источник

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (x, a, b) -> c Источник

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (x, a, b) -> c Источник

Bifoldable (K1 i :: Type -> Type -> Type) Источник

С версии: base-4.10.0.0

Подробности экземпляра

Определено в Data.Bifoldable

Краткое описание методов

bifold :: Monoid m => K1 i m m -> m Source

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> K1 i a b -> m Source

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> K1 i a b -> c Source

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> K1 i a b -> c Source

Bifoldable ((,,,) x y) Source

С версии: base-4.10.0.0

Подробности экземпляра

Определено в Data.Bifoldable

Краткое описание методов

bifold :: Monoid m => (x, y, m, m) -> m Source

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (x, y, a, b) -> m Source

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (x, y, a, b) -> c Source

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (x, y, a, b) -> c Source

Bifoldable ((,,,,) x y z) Source

С версии: base-4.10.0.0

Подробности экземпляра

Определено в Data.Bifoldable

Краткое описание методов

bifold :: Monoid m => (x, y, z, m, m) -> m Source

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> (x, y, z, a, b) -> m Source

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> (x, y, z, a, b) -> c Source

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> (x, y, z, a, b) -> c Source

Bifoldable ((,,,,,) x y z w) Source

С версии: base-4.10.0.0

Подробности экземпляра

Определено в 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) Source

С версии: base-4.10.0.0

Подробности экземпляра

Определено в 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, но строгое в результате функций редукции на каждом шаге.

С версии: base-4.10.0.0

bifoldr1 :: Bifoldable t => (a -> a -> a) -> t a a -> a Source

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

Примеры
Развернуть

Базовое использование:

>>> bifoldr1 (+) (5, 7)
12
>>> bifoldr1 (+) (Right 7)
7
>>> bifoldr1 (+) (Left 5)
5
> bifoldr1 (+) (BiList [1, 2] [3, 4])
10 -- 1 + (2 + (3 + 4))
>>> bifoldr1 (+) (BiList [1, 2] [])
3

На пустых структурах эта функция вызывает исключение:

>>> bifoldr1 (+) (BiList [] [])
*** Exception: bifoldr1: empty structure
...

С версии: 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

Правая ассоциативная монадическая бискладка над структурой.

С версии: base-4.10.0.0

bifoldl' :: Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a Source

Как bifoldl, но строго в результате функций сокращения на каждом шаге.

Это гарантирует, что каждый шаг bifold принуждается к слабой нормальной форме перед применением, избегая сбора заглушек, которые в противном случае произошли бы. Это часто то, что вам нужно, чтобы строго свести конечную структуру к одному, монолитный результату (например, bilength).

С тех пор: base-4.10.0.0

bifoldl1 :: Bifoldable t => (a -> a -> a) -> t a a -> a Source

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

Примеры
Развернуть

Базовое использование:

>>> bifoldl1 (+) (5, 7)
12
>>> bifoldl1 (+) (Right 7)
7
>>> bifoldl1 (+) (Left 5)
5
> bifoldl1 (+) (BiList [1, 2] [3, 4])
10 -- ((1 + 2) + 3) + 4
>>> bifoldl1 (+) (BiList [1, 2] [])
3

В пустых структурах эта функция выбрасывает исключение:

>>> bifoldl1 (+) (BiList [] [])
*** Exception: bifoldl1: empty structure
...

С тех пор: 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

Левоассоциативное монадическое bifold над структурой.

Примеры
Развернуть

Базовое использование:

>>> bifoldlM (\a b -> print b >> pure a) (\a c -> print (show c) >> pure a) 42 ("Hello", True)
"Hello"
"True"
42
>>> bifoldlM (\a b -> print b >> pure a) (\a c -> print (show c) >> pure a) 42 (Right True)
"True"
42
>>> bifoldlM (\a b -> print b >> pure a) (\a c -> print (show c) >> pure a) 42 (Left "Hello")
"Hello"
42

С тех пор: base-4.10.0.0

bitraverse_ :: (Bifoldable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f () Source

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

Примеры
Развернуть

Базовое использование:

>>> bitraverse_ print (print . show) ("Hello", True)
"Hello"
"True"
>>> bitraverse_ print (print . show) (Right True)
"True"
>>> bitraverse_ print (print . show) (Left "Hello")
"Hello"

С тех пор: base-4.10.0.0

bifor_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () Source

Как bitraverse_, но со структурой в качестве основного аргумента. Для версии, которая не игнорирует результаты, см. bifor.

Примеры
Развернуть

Базовое использование:

>>> bifor_ ("Hello", True) print (print . show)
"Hello"
"True"
>>> bifor_ (Right True) print (print . show)
"True"
>>> bifor_ (Left "Hello") print (print . show)
"Hello"

С тех пор: 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.

Примеры
Развернуть

Базовое использование:

>>> bisequence_ (print "Hello", print "World")
"Hello"
"World"
>>> bisequence_ (Left (print "Hello"))
"Hello"
>>> bisequence_ (Right (print "World"))
"World"

С тех пор: base-4.10.0.0

biasum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a Source

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

Примеры
Развернуть

Базовое использование:

>>> biasum (Nothing, Nothing)
Nothing
>>> biasum (Nothing, Just 42)
Just 42
>>> biasum (Just 18, Nothing)
Just 18
>>> biasum (Just 18, Just 42)
Just 18

С тех пор: base-4.10.0.0

biList :: Bifoldable t => t a a -> [a] Source

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

Примеры
Развернуть

Базовое использование:

>>> biList (18, 42)
[18,42]
>>> biList (Left 18)
[18]

С тех пор: base-4.10.0.0

binull :: Bifoldable t => t a b -> Bool Source

Проверка, является ли структура пустой.

Примеры
Развернуть

Базовое использование:

>>> binull (18, 42)
False
>>> binull (Right 42)
False
>>> binull (BiList [] [])
True

С тех пор: base-4.10.0.0

bilength :: Bifoldable t => t a b -> Int Source

Возвращает размер/длину конечной структуры как Int.

Примеры
Развернуть

Базовое использование:

>>> bilength (True, 42)
2
>>> bilength (Right 42)
1
>>> bilength (BiList [1,2,3] [4,5])
5
>>> bilength (BiList [] [])
0

В бесконечных структурах эта функция зависает:

> bilength (BiList [1..] [])
* Hangs forever *

С тех пор: base-4.10.0.0

bielem :: (Bifoldable t, Eq a) => a -> t a a -> Bool Source

Является ли элемент в структуре?

Примеры
Развернуть

Базовое использование:

>>> bielem 42 (17, 42)
True
>>> bielem 42 (17, 43)
False
>>> bielem 42 (Left 42)
True
>>> bielem 42 (Right 13)
False
>>> bielem 42 (BiList [1..5] [1..100])
True
>>> bielem 42 (BiList [1..5] [1..41])
False

С тех пор: base-4.10.0.0

bimaximum :: (Bifoldable t, Ord a) => t a a -> a Source

Наибольший элемент непустой структуры. Эта функция эквивалентна bifoldr1 max, а её поведение на структурах с несколькими наибольшими элементами зависит от соответствующей реализации max. Для стандартной реализации max (max x y = if x <= y then y else x) порядок структуры используется как решающий фактор при ничьих: если есть несколько наибольших элементов, выбирается самый правый из них (это эквивалентно bimaximumBy compare).

Примеры
Развернуть

Базовое использование:

>>> bimaximum (42, 17)
42
>>> bimaximum (Right 42)
42
>>> bimaximum (BiList [13, 29, 4] [18, 1, 7])
29
>>> bimaximum (BiList [13, 29, 4] [])
29

На пустых структурах эта функция генерирует исключение:

>>> bimaximum (BiList [] [])
*** Exception: bimaximum: empty structure
...

С версии: base-4.10.0.0

biminimum :: (Bifoldable t, Ord a) => t a a -> a Source

Наименьший элемент непустой структуры. Эта функция эквивалентна bifoldr1 min, а её поведение на структурах с несколькими наименьшими элементами зависит от соответствующей реализации min. Для стандартной реализации min (min x y = if x <= y then x else y) порядок структуры используется как решающий фактор при ничьих: если есть несколько наименьших элементов, выбирается самый левый из них (это эквивалентно biminimumBy compare).

Примеры
Развернуть

Базовое использование:

>>> biminimum (42, 17)
17
>>> biminimum (Right 42)
42
>>> biminimum (BiList [13, 29, 4] [18, 1, 7])
1
>>> biminimum (BiList [13, 29, 4] [])
4

На пустых структурах эта функция генерирует исключение:

>>> biminimum (BiList [] [])
*** Exception: biminimum: empty structure
...

С версии: base-4.10.0.0

bisum :: (Bifoldable t, Num a) => t a a -> a Source

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

Примеры
Развернуть

Базовое использование:

>>> bisum (42, 17)
59
>>> bisum (Right 42)
42
>>> bisum (BiList [13, 29, 4] [18, 1, 7])
72
>>> bisum (BiList [13, 29, 4] [])
46
>>> bisum (BiList [] [])
0

С версии: base-4.10.0.0

biproduct :: (Bifoldable t, Num a) => t a a -> a Source

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

Примеры
Развернуть

Базовое использование:

>>> biproduct (42, 17)
714
>>> biproduct (Right 42)
42
>>> biproduct (BiList [13, 29, 4] [18, 1, 7])
190008
>>> biproduct (BiList [13, 29, 4] [])
1508
>>> biproduct (BiList [] [])
1

С версии: base-4.10.0.0

biconcat :: Bifoldable t => t [a] [a] -> [a] Source

Преобразует структуру списков в конкатенацию этих списков.

Примеры
Развернуть

Базовое использование:

>>> biconcat ([1, 2, 3], [4, 5])
[1,2,3,4,5]
>>> biconcat (Left [1, 2, 3])
[1,2,3]
>>> biconcat (BiList [[1, 2, 3, 4, 5], [6, 7, 8]] [[9]])
[1,2,3,4,5,6,7,8,9]

С версии: base-4.10.0.0

biconcatMap :: Bifoldable t => (a -> [c]) -> (b -> [c]) -> t a b -> [c] Source

При заданном способе отображения элементов структуры в списки, вычисляет конкатенацию всех таких списков в порядке.

Примеры
Развернуть

Базовое использование:

>>> biconcatMap (take 3) (fmap digitToInt) ([1..], "89")
[1,2,3,8,9]
>>> biconcatMap (take 3) (fmap digitToInt) (Left [1..])
[1,2,3]
>>> biconcatMap (take 3) (fmap digitToInt) (Right "89")
[8,9]

С версии: base-4.10.0.0

biand :: Bifoldable t => t Bool Bool -> Bool Source

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

Примеры
Развернуть

Базовое использование:

>>> biand (True, False)
False
>>> biand (True, True)
True
>>> biand (Left True)
True

Пустые структуры возвращают True:

>>> biand (BiList [] [])
True

Значение False на конечном расстоянии от левого конца возвращает False (короткое замыкание):

>>> biand (BiList [True, True, False, True] (repeat True))
False

Значение False на бесконечном расстоянии от левого конца висит:

> biand (BiList (repeat True) [False])
* Hangs forever *

Бесконечное True значение висит:

> biand (BiList (repeat True) [])
* Hangs forever *

С версии: base-4.10.0.0

bior :: Bifoldable t => t Bool Bool -> Bool Source

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

Примеры
Развернуть

Базовое использование:

>>> bior (True, False)
True
>>> bior (False, False)
False
>>> bior (Left True)
True

Пустые структуры возвращают False:

>>> bior (BiList [] [])
False

Значение True на конечном расстоянии от левого конца возвращает True (короткое замыкание):

>>> bior (BiList [False, False, True, False] (repeat False))
True

Значение True на бесконечном расстоянии от левого конца висит:

> bior (BiList (repeat False) [True])
* Hangs forever *

Бесконечное False значение висит:

> bior (BiList (repeat False) [])
* Hangs forever *

С версии: base-4.10.0.0

biany :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool Source

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

Примеры
Развернуть

Базовое использование:

>>> biany even isDigit (27, 't')
False
>>> biany even isDigit (27, '8')
True
>>> biany even isDigit (26, 't')
True
>>> biany even isDigit (Left 27)
False
>>> biany even isDigit (Left 26)
True
>>> biany even isDigit (BiList [27, 53] ['t', '8'])
True

Пустые структуры возвращают False:

>>> biany even isDigit (BiList [] [])
False

С версии: base-4.10.0.0

biall :: Bifoldable t => (a -> Bool) -> (b -> Bool) -> t a b -> Bool Source

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

Примеры
Развернуть

Базовое использование:

>>> biall even isDigit (27, 't')
False
>>> biall even isDigit (26, '8')
True
>>> biall even isDigit (Left 27)
False
>>> biall even isDigit (Left 26)
True
>>> biall even isDigit (BiList [26, 52] ['3', '8'])
True

Пустые структуры возвращают True:

>>> biall even isDigit (BiList [] [])
True

С версии: base-4.10.0.0

bimaximumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a Source

Наибольший элемент непустой структуры относительно заданной функции сравнения. Порядок структуры используется как решающий фактор при ничьих: если есть несколько наибольших элементов, выбирается самый правый из них.

Примеры
Развернуть

Основное использование:

>>> bimaximumBy compare (42, 17)
42
>>> bimaximumBy compare (Left 17)
17
>>> bimaximumBy compare (BiList [42, 17, 23] [-5, 18])
42

На пустых структурах эта функция выбрасывает исключение:

>>> bimaximumBy compare (BiList [] [])
*** Exception: bifoldr1: empty structure
...

С тех пор: base-4.10.0.0

biminimumBy :: Bifoldable t => (a -> a -> Ordering) -> t a a -> a Источник

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

Примеры
Развернуть

Основное использование:

>>> biminimumBy compare (42, 17)
17
>>> biminimumBy compare (Left 17)
17
>>> biminimumBy compare (BiList [42, 17, 23] [-5, 18])
-5

На пустых структурах эта функция выбрасывает исключение:

>>> biminimumBy compare (BiList [] [])
*** Exception: bifoldr1: empty structure
...

С тех пор: base-4.10.0.0

binotElem :: (Bifoldable t, Eq a) => a -> t a a -> Bool Источник

binotElem — это отрицание bielem.

Примеры
Развернуть

Основное использование:

>>> binotElem 42 (17, 42)
False
>>> binotElem 42 (17, 43)
True
>>> binotElem 42 (Left 42)
False
>>> binotElem 42 (Right 13)
True
>>> binotElem 42 (BiList [1..5] [1..100])
False
>>> binotElem 42 (BiList [1..5] [1..41])
True

С тех пор: base-4.10.0.0

bifind :: Bifoldable t => (a -> Bool) -> t a a -> Maybe a Источник

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

Примеры
Развернуть

Основное использование:

>>> bifind even (27, 53)
Nothing
>>> bifind even (27, 52)
Just 52
>>> bifind even (26, 52)
Just 26

Пустые структуры всегда возвращают Nothing:

>>> bifind even (BiList [] [])
Nothing

С тех пор: 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/9.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Bifoldable.html

Spec-Zone.ru

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