Spec-Zone.ru › Haskell 9

Data.Bifoldable

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

Обратите внимание: если вам нужна эффективная свёртка влево, вероятно, следует использовать 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 Источник

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

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

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

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

Начиная с: base-4.10.0.0

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

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

Методы

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

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

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

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

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

Начиная с: base-4.10.0.0

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

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

Методы

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

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

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

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

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

Начиная с: base-4.10.0.0

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

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

Методы

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

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

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

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

Bifoldable ((,,,,,,) x y z w v) Источник

Начиная с: base-4.10.0.0

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

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

Методы

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

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

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

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

bifoldr' :: Bifoldable t => (a -> c -> c) -> (b -> c -> c) -> c -> t a b -> c Источник

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

Начиная с: base-4.10.0.0

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

Вариант 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 Источник

Монадическая би-свёртка структуры с правоассоциативным порядком.

Начиная с: base-4.10.0.0

bifoldl' :: Bifoldable t => (a -> b -> a) -> (a -> c -> a) -> a -> t b c -> a Источник

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

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

Начиная с: base-4.10.0.0

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

Вариант 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 Источник

Монадическая би-свёртка структуры с левосторонне-ассоциативным порядком.

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

Пример использования:

>>> 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 () Источник

Отображает каждый элемент структуры с помощью одного из двух действий, выполняет эти действия слева направо и игнорирует результаты. Версию, которая не игнорирует результаты, см. в 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 () Источник

Аналог 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 () Источник

Псевдоним для bitraverse_.

Начиная с: base-4.10.0.0

biforM_ :: (Bifoldable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f () Источник

Псевдоним для bifor_.

Начиная с: base-4.10.0.0

bimsum :: (Bifoldable t, Alternative f) => t (f a) (f a) -> f a Источник

Псевдоним для biasum.

Начиная с: base-4.10.0.0

bisequenceA_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () Источник

Псевдоним для bisequence_.

Начиная с: base-4.10.0.0

bisequence_ :: (Bifoldable t, Applicative f) => t (f a) (f b) -> f () Источник

Выполняет каждое действие в структуре слева направо и игнорирует результаты. Версию, которая не игнорирует результаты, см. в 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 Источник

Сумма набора действий, обобщающая 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] Источник

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

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

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

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

Начиная с: base-4.10.0.0

binull :: Bifoldable t => t a b -> Bool Источник

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

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

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

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

Начиная с: base-4.10.0.0

bilength :: Bifoldable t => t a b -> Int Источник

Возвращает размер/длину конечной структуры в виде 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 Источник

Встречается ли элемент в структуре?

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

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

>>> 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 Источник

Наибольший элемент непустой структуры. Эта функция эквивалентна 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 Источник

Наименьший элемент непустой структуры. Эта функция эквивалентна 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 Источник

Функция 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 Источник

Функция 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] Источник

Сворачивает структуру списков в конкатенацию этих списков.

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

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

>>> 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] Источник

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

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

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

>>> 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 Источник

biand возвращает конъюнкцию значений Bool в контейнере. Чтобы результат был 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 Источник

bior возвращает дизъюнкцию значений Bool в контейнере. Чтобы результат был 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 Источник

Определяет, удовлетворяет ли какой-либо элемент структуры соответствующему ему предикату. Для пустых структур результатом будет 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 Источник

Определяет, удовлетворяют ли все элементы структуры соответствующим им предикатам. Для пустых структур результатом будет 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 Источник

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

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

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

>>> 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.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Bifoldable.html

Spec-Zone.ru

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