Spec-Zone.ru › Haskell 8

Data.Bitraversable

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

Описание

С момента: base-4.10.0.0

class (Bifunctor t, Bifoldable t) => Bitraversable t where Исходный код

Bitraversable определяет бифункторные структуры данных, элементы которых можно пройти по порядку, выполняя Applicative или Monad действия для каждого элемента и собирая структуру результата той же формы.

В отличие от Traversable структур данных, которые имеют один вид элемента, над которым можно выполнить действие, Bitraversable структуры данных имеют два таких вида элементов.

Определение bitraverse должно удовлетворять следующим законам:

Натуральность
bitraverse (t . f) (t . g) ≡ t . bitraverse f g для каждой аппликативной трансформации t
Тождество
bitraverse Identity Identity ≡ Identity
Композиция
Compose . fmap (bitraverse g1 g2) . bitraverse f1 f2 ≡ bitraverse (Compose . fmap g1 . f1) (Compose . fmap g2 . f2)

где аппликативная трансформация — это функция

t :: (Applicative f, Applicative g) => f a -> g a

сохраняющая Applicative операции:

t (pure x) = pure x
t (f <*> x) = t f <*> t x

и тождественный функтор Identity и функторы композиции Compose из Data.Functor.Identity и Data.Functor.Compose.

Некоторые простые примеры — Either и (,):

instance Bitraversable Either where
  bitraverse f _ (Left x) = Left <$> f x
  bitraverse _ g (Right y) = Right <$> g y

instance Bitraversable (,) where
  bitraverse f g (x, y) = (,) <$> f x <*> g y

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

bimap f g ≡ runIdentity . bitraverse (Identity . f) (Identity . g)
bifoldMap f g = getConst . bitraverse (Const . f) (Const . g)

Они доступны как bimapDefault и bifoldMapDefault соответственно.

С момента: base-4.10.0.0

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

Nothing

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> t a b -> f (t c d) Исходный код

Вычисляет соответствующие функции для каждого элемента в структуре, выполняет действие и строит новую структуру с той же формой, используя результаты, полученные из последовательного выполнения действий.

bitraverse f g ≡ bisequenceA . bimap f g

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

С момента: base-4.10.0.0

Экземпляры
Подробности о экземплярах
Bitraversable Either

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Either a b -> f (Either c d) Source

Bitraversable (,)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (a, b) -> f (c, d) Source

Bitraversable Arg

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Arg a b -> f (Arg c d) Source

Bitraversable ((,,) x)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (x, a, b) -> f (x, c, d) Source

Bitraversable (Const :: Type -> Type -> Type)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Const a b -> f (Const c d) Source

Bitraversable (K1 i :: Type -> Type -> Type)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> K1 i a b -> f (K1 i c d) Source

Bitraversable ((,,,) x y)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (x, y, a, b) -> f (x, y, c, d) Source

Bitraversable ((,,,,) x y z)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (x, y, z, a, b) -> f (x, y, z, c, d) Source

Bitraversable ((,,,,,) x y z w)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (x, y, z, w, a, b) -> f (x, y, z, w, c, d) Source

Bitraversable ((,,,,,,) x y z w v)

Since: base-4.10.0.0

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

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

Методы

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> (x, y, z, w, v, a, b) -> f (x, y, z, w, v, c, d) Source

bisequenceA :: (Bitraversable t, Applicative f) => t (f a) (f b) -> f (t a b) Source

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

Since: base-4.10.0.0

bisequence :: (Bitraversable t, Applicative f) => t (f a) (f b) -> f (t a b) Source

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

bisequence ≡ bitraverse id id

Since: base-4.10.0.0

bimapM :: (Bitraversable t, Applicative f) => (a -> f c) -> (b -> f d) -> t a b -> f (t c d) Source

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

Since: base-4.10.0.0

bifor :: (Bitraversable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f (t c d) Source

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

Since: base-4.10.0.0

biforM :: (Bitraversable t, Applicative f) => t a b -> (a -> f c) -> (b -> f d) -> f (t c d) Source

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

Since: base-4.10.0.0

bimapAccumL :: Bitraversable t => (a -> b -> (a, c)) -> (a -> d -> (a, e)) -> a -> t b d -> (a, t c e) Source

Функция bimapAccumL ведет себя как комбинация bimap и bifoldl; она проходит по структуре слева направо, передавая состояние типа a и используя заданные действия для вычисления новых элементов структуры.

Since: base-4.10.0.0

bimapAccumR :: Bitraversable t => (a -> b -> (a, c)) -> (a -> d -> (a, e)) -> a -> t b d -> (a, t c e) Source

Функция bimapAccumR ведет себя как комбинация bimap и bifoldl; она проходит по структуре справа налево, передавая состояние типа a и используя заданные действия для вычисления новых элементов структуры.

Since: base-4.10.0.0

bimapDefault :: forall t a b c d. Bitraversable t => (a -> b) -> (c -> d) -> t a c -> t b d Source

Базовое определение bimap через операции Bitraversable.

bimapDefault f g ≡
     runIdentity . bitraverse (Identity . f) (Identity . g)

Since: base-4.10.0.0

bifoldMapDefault :: forall t m a b. (Bitraversable t, Monoid m) => (a -> m) -> (b -> m) -> t a b -> m Source

Базовое определение bifoldMap через операции Bitraversable.

bifoldMapDefault f g ≡
    getConst . bitraverse (Const . f) (Const . g)

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-Bitraversable.html

Spec-Zone.ru

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