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