Spec-Zone.ru › Haskell 8

Data.Traversable

Авторские права Conor McBride и Ross Paterson 2005
Лицензия BSD-стиль (см. файл LICENSE в дистрибутиве)
Поддержка libraries@haskell.org
Стабильность экспериментальная
Переносимость переносимая
Безопасный Haskell Достоверный
Язык Haskell2010

Содержание

  • Класс Traversable
  • Вспомогательные функции
  • Общие определения для методов суперкласса

Описание

Класс структур данных, которые можно проходить слева направо, выполняя действие над каждым элементом.

См. также

  • "Прикладное программирование с эффектами", Conor McBride и Ross Paterson, Журнал функционального программирования 18:1 (2008) 1-13, онлайн по адресу http://www.soi.city.ac.uk/~ross/papers/Applicative.html.
  • "Суть паттерна итератора", Jeremy Gibbons и Bruno Oliveira, в Математически структурированном функциональном программировании, 2006, онлайн по адресу http://web.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/#iterator.
  • "Исследование законов проходов", Mauro Jaskelioff и Ondrej Rypacek, в Математически структурированном функциональном программировании, 2012, онлайн по адресу http://arxiv.org/pdf/1202.2919.

Класс Traversable

class (Functor t, Foldable t) => Traversable t where Исходный код

Функторы, представляющие структуры данных, которые можно обходить слева направо.

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

Естественность
t . traverse f = traverse (t . f) для каждой прикладной трансформации t
Тождество
traverse Identity = Identity
Композиция
traverse (Compose . fmap g . f) = Compose . fmap (traverse g) . traverse f

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

Естественность
t . sequenceA = sequenceA . fmap t для каждой прикладной трансформации t
Тождество
sequenceA . fmap Identity = Identity
Композиция
sequenceA . fmap Compose = Compose . fmap sequenceA . sequenceA

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

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.

Результатом закона естественности является закон чистоты для traverse

traverse pure = pure

(Закон естественности подразумевается параметричностью, а значит, подразумевается и закон чистоты [1, с. 15]).

Примеры аналогичны Functor, например, задан тип данных

data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)

подходящий экземпляр будет

instance Traversable Tree where
   traverse f Empty = pure Empty
   traverse f (Leaf x) = Leaf <$> f x
   traverse f (Node l k r) = Node <$> traverse f l <*> f k <*> traverse f r

Это подходит даже для абстрактных типов, так как законы для <*> подразумевают форму ассоциативности.

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

  • В экземпляре Functor, fmap должен быть эквивалентен прохождению с тождественным прикладным функтором (fmapDefault).
  • В экземпляре Foldable, foldMap должен быть эквивалентен прохождению с постоянным прикладным функтором (foldMapDefault).

Ссылки: [1] Суть паттерна итератора, Jeremy Gibbons и Bruno C. d. S. Oliveira

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

traverse | sequenceA

Методы

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

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

sequenceA :: Applicative f => t (f a) -> f (t a) Исходный код

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

mapM :: Monad m => (a -> m b) -> t a -> m (t b) Исходный код

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

sequence :: Monad m => t (m a) -> m (t a) Исходный код

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

Примеры
Подробности примеров
Traversable []

С тех пор как: base-2.1

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

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

Методы

traverse :: Applicative f => (a -> f b) -> [a] -> f [b] Источник

sequenceA :: Applicative f => [f a] -> f [a] Источник

mapM :: Monad m => (a -> m b) -> [a] -> m [b] Источник

sequence :: Monad m => [m a] -> m [a] Источник

Traversable Maybe

С тех пор как: base-2.1

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

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

Методы

traverse :: Applicative f => (a -> f b) -> Maybe a -> f (Maybe b) Источник

sequenceA :: Applicative f => Maybe (f a) -> f (Maybe a) Источник

mapM :: Monad m => (a -> m b) -> Maybe a -> m (Maybe b) Источник

sequence :: Monad m => Maybe (m a) -> m (Maybe a) Источник

Traversable Par1

С тех пор как: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> Par1 a -> f (Par1 b) Источник

sequenceA :: Applicative f => Par1 (f a) -> f (Par1 a) Источник

mapM :: Monad m => (a -> m b) -> Par1 a -> m (Par1 b) Источник

sequence :: Monad m => Par1 (m a) -> m (Par1 a) Источник

Traversable NonEmpty

С тех пор как: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> NonEmpty a -> f (NonEmpty b) Источник

sequenceA :: Applicative f => NonEmpty (f a) -> f (NonEmpty a) Источник

mapM :: Monad m => (a -> m b) -> NonEmpty a -> m (NonEmpty b) Источник

sequence :: Monad m => NonEmpty (m a) -> m (NonEmpty a) Источник

Traversable Down

С тех пор как: base-4.12.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> Down a -> f (Down b) Источник

sequenceA :: Applicative f => Down (f a) -> f (Down a) Источник

mapM :: Monad m => (a -> m b) -> Down a -> m (Down b) Источник

sequence :: Monad m => Down (m a) -> m (Down a) Источник

Traversable Product

С тех пор как: base-4.8.0.0

Информация о экземпляре

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

Методы

traverse :: Applicative f => (a -> f b) -> Product a -> f (Product b) Исходный код

sequenceA :: Applicative f => Product (f a) -> f (Product a) Исходный код

mapM :: Monad m => (a -> m b) -> Product a -> m (Product b) Исходный код

sequence :: Monad m => Product (m a) -> m (Product a) Исходный код

Traversable Sum

С версии: base-4.8.0.0

Информация о экземпляре

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

Методы

traverse :: Applicative f => (a -> f b) -> Sum a -> f (Sum b) Исходный код

sequenceA :: Applicative f => Sum (f a) -> f (Sum a) Исходный код

mapM :: Monad m => (a -> m b) -> Sum a -> m (Sum b) Исходный код

sequence :: Monad m => Sum (m a) -> m (Sum a) Исходный код

Traversable Dual

С версии: base-4.8.0.0

Информация о экземпляре

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

Методы

traverse :: Applicative f => (a -> f b) -> Dual a -> f (Dual b) Исходный код

sequenceA :: Applicative f => Dual (f a) -> f (Dual a) Исходный код

mapM :: Monad m => (a -> m b) -> Dual a -> m (Dual b) Исходный код

sequence :: Monad m => Dual (m a) -> m (Dual a) Исходный код

Traversable Last

С версии: base-4.8.0.0

Информация о экземпляре

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

Методы

traverse :: Applicative f => (a -> f b) -> Last a -> f (Last b) Исходный код

sequenceA :: Applicative f => Last (f a) -> f (Last a) Исходный код

mapM :: Monad m => (a -> m b) -> Last a -> m (Last b) Исходный код

sequence :: Monad m => Last (m a) -> m (Last a) Исходный код

Traversable First

С версии: base-4.8.0.0

Информация о экземпляре

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

Методы

traverse :: Applicative f => (a -> f b) -> First a -> f (First b) Исходный код

sequenceA :: Applicative f => First (f a) -> f (First a) Исходный код

mapM :: Monad m => (a -> m b) -> First a -> m (First b) Исходный код

sequence :: Monad m => First (m a) -> m (First a) Исходный код

Traversable Identity

С версии: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> Identity a -> f (Identity b) Source

sequenceA :: Applicative f => Identity (f a) -> f (Identity a) Source

mapM :: Monad m => (a -> m b) -> Identity a -> m (Identity b) Source

sequence :: Monad m => Identity (m a) -> m (Identity a) Source

Traversable ZipList

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> ZipList a -> f (ZipList b) Source

sequenceA :: Applicative f => ZipList (f a) -> f (ZipList a) Source

mapM :: Monad m => (a -> m b) -> ZipList a -> m (ZipList b) Source

sequence :: Monad m => ZipList (m a) -> m (ZipList a) Source

Traversable Option

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> Option a -> f (Option b) Source

sequenceA :: Applicative f => Option (f a) -> f (Option a) Source

mapM :: Monad m => (a -> m b) -> Option a -> m (Option b) Source

sequence :: Monad m => Option (m a) -> m (Option a) Source

Traversable Last

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> Last a -> f (Last b) Source

sequenceA :: Applicative f => Last (f a) -> f (Last a) Source

mapM :: Monad m => (a -> m b) -> Last a -> m (Last b) Source

sequence :: Monad m => Last (m a) -> m (Last a) Source

Traversable First

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> First a -> f (First b) Source

sequenceA :: Applicative f => First (f a) -> f (First a) Source

mapM :: Monad m => (a -> m b) -> First a -> m (First b) Source

sequence :: Monad m => First (m a) -> m (First a) Source

Traversable Max

Since: base-4.9.0.0

Instance details

Defined in Data.Semigroup

Методы

traverse :: Applicative f => (a -> f b) -> Max a -> f (Max b) Source

sequenceA :: Applicative f => Max (f a) -> f (Max a) Source

mapM :: Monad m => (a -> m b) -> Max a -> m (Max b) Source

sequence :: Monad m => Max (m a) -> m (Max a) Source

Traversable Min

Since: base-4.9.0.0

Instance details

Defined in Data.Semigroup

Методы

traverse :: Applicative f => (a -> f b) -> Min a -> f (Min b) Source

sequenceA :: Applicative f => Min (f a) -> f (Min a) Source

mapM :: Monad m => (a -> m b) -> Min a -> m (Min b) Source

sequence :: Monad m => Min (m a) -> m (Min a) Source

Traversable Complex

Since: base-4.9.0.0

Instance details

Defined in Data.Complex

Методы

traverse :: Applicative f => (a -> f b) -> Complex a -> f (Complex b) Source

sequenceA :: Applicative f => Complex (f a) -> f (Complex a) Source

mapM :: Monad m => (a -> m b) -> Complex a -> m (Complex b) Source

sequence :: Monad m => Complex (m a) -> m (Complex a) Source

Traversable (Either a)

Since: base-4.7.0.0

Instance details

Defined in Data.Traversable

Методы

traverse :: Applicative f => (a0 -> f b) -> Either a a0 -> f (Either a b) Source

sequenceA :: Applicative f => Either a (f a0) -> f (Either a a0) Source

mapM :: Monad m => (a0 -> m b) -> Either a a0 -> m (Either a b) Source

sequence :: Monad m => Either a (m a0) -> m (Either a a0) Source

Traversable (V1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Методы

traverse :: Applicative f => (a -> f b) -> V1 a -> f (V1 b) Source

sequenceA :: Applicative f => V1 (f a) -> f (V1 a) Source

mapM :: Monad m => (a -> m b) -> V1 a -> m (V1 b) Source

sequence :: Monad m => V1 (m a) -> m (V1 a) Source

Traversable (U1 :: Type -> Type)

Since: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> U1 a -> f (U1 b) Source

sequenceA :: Applicative f => U1 (f a) -> f (U1 a) Source

mapM :: Monad m => (a -> m b) -> U1 a -> m (U1 b) Source

sequence :: Monad m => U1 (m a) -> m (U1 a) Source

Traversable (UAddr :: Type -> Type)

Since: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> UAddr a -> f (UAddr b) Source

sequenceA :: Applicative f => UAddr (f a) -> f (UAddr a) Source

mapM :: Monad m => (a -> m b) -> UAddr a -> m (UAddr b) Source

sequence :: Monad m => UAddr (m a) -> m (UAddr a) Source

Traversable (UChar :: Type -> Type)

Since: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> UChar a -> f (UChar b) Source

sequenceA :: Applicative f => UChar (f a) -> f (UChar a) Source

mapM :: Monad m => (a -> m b) -> UChar a -> m (UChar b) Source

sequence :: Monad m => UChar (m a) -> m (UChar a) Source

Traversable (UDouble :: Type -> Type)

Since: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> UDouble a -> f (UDouble b) Source

sequenceA :: Applicative f => UDouble (f a) -> f (UDouble a) Source

mapM :: Monad m => (a -> m b) -> UDouble a -> m (UDouble b) Source

sequence :: Monad m => UDouble (m a) -> m (UDouble a) Source

Traversable (UFloat :: Type -> Type)

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> UFloat a -> f (UFloat b) Source

sequenceA :: Applicative f => UFloat (f a) -> f (UFloat a) Source

mapM :: Monad m => (a -> m b) -> UFloat a -> m (UFloat b) Source

sequence :: Monad m => UFloat (m a) -> m (UFloat a) Source

Traversable (UInt :: Type -> Type)

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> UInt a -> f (UInt b) Source

sequenceA :: Applicative f => UInt (f a) -> f (UInt a) Source

mapM :: Monad m => (a -> m b) -> UInt a -> m (UInt b) Source

sequence :: Monad m => UInt (m a) -> m (UInt a) Source

Traversable (UWord :: Type -> Type)

Since: base-4.9.0.0

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

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

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

traverse :: Applicative f => (a -> f b) -> UWord a -> f (UWord b) Source

sequenceA :: Applicative f => UWord (f a) -> f (UWord a) Source

mapM :: Monad m => (a -> m b) -> UWord a -> m (UWord b) Source

sequence :: Monad m => UWord (m a) -> m (UWord a) Source

Traversable ((,) a)

Since: base-4.7.0.0

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

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

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

traverse :: Applicative f => (a0 -> f b) -> (a, a0) -> f (a, b) Source

sequenceA :: Applicative f => (a, f a0) -> f (a, a0) Source

mapM :: Monad m => (a0 -> m b) -> (a, a0) -> m (a, b) Source

sequence :: Monad m => (a, m a0) -> m (a, a0) Source

Ix i => Traversable (Array i)

Since: base-2.1

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

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

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

traverse :: Applicative f => (a -> f b) -> Array i a -> f (Array i b) Source

sequenceA :: Applicative f => Array i (f a) -> f (Array i a) Source

mapM :: Monad m => (a -> m b) -> Array i a -> m (Array i b) Source

sequence :: Monad m => Array i (m a) -> m (Array i a) Source

Traversable (Proxy :: Type -> Type)

Since: base-4.7.0.0

Подробности о реализации

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

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

traverse :: Applicative f => (a -> f b) -> Proxy a -> f (Proxy b) Source

sequenceA :: Applicative f => Proxy (f a) -> f (Proxy a) Source

mapM :: Monad m => (a -> m b) -> Proxy a -> m (Proxy b) Source

sequence :: Monad m => Proxy (m a) -> m (Proxy a) Source

Traversable (Arg a)

Since: base-4.9.0.0

Подробности о реализации

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

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

traverse :: Applicative f => (a0 -> f b) -> Arg a a0 -> f (Arg a b) Source

sequenceA :: Applicative f => Arg a (f a0) -> f (Arg a a0) Source

mapM :: Monad m => (a0 -> m b) -> Arg a a0 -> m (Arg a b) Source

sequence :: Monad m => Arg a (m a0) -> m (Arg a a0) Source

Traversable f => Traversable (Rec1 f)

Since: base-4.9.0.0

Подробности о реализации

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

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

traverse :: Applicative f0 => (a -> f0 b) -> Rec1 f a -> f0 (Rec1 f b) Source

sequenceA :: Applicative f0 => Rec1 f (f0 a) -> f0 (Rec1 f a) Source

mapM :: Monad m => (a -> m b) -> Rec1 f a -> m (Rec1 f b) Source

sequence :: Monad m => Rec1 f (m a) -> m (Rec1 f a) Source

Traversable f => Traversable (Alt f)

Since: base-4.12.0.0

Подробности о реализации

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

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

traverse :: Applicative f0 => (a -> f0 b) -> Alt f a -> f0 (Alt f b) Source

sequenceA :: Applicative f0 => Alt f (f0 a) -> f0 (Alt f a) Source

mapM :: Monad m => (a -> m b) -> Alt f a -> m (Alt f b) Source

sequence :: Monad m => Alt f (m a) -> m (Alt f a) Source

Traversable f => Traversable (Ap f)

Since: base-4.12.0.0

Подробности о реализации

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

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

traverse :: Applicative f0 => (a -> f0 b) -> Ap f a -> f0 (Ap f b) Source

sequenceA :: Applicative f0 => Ap f (f0 a) -> f0 (Ap f a) Source

mapM :: Monad m => (a -> m b) -> Ap f a -> m (Ap f b) Source

sequence :: Monad m => Ap f (m a) -> m (Ap f a) Source

Traversable (Const m :: Type -> Type)

Since: base-4.7.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> Const m a -> f (Const m b) Исходный код

sequenceA :: Applicative f => Const m (f a) -> f (Const m a) Исходный код

mapM :: Monad m0 => (a -> m0 b) -> Const m a -> m0 (Const m b) Исходный код

sequence :: Monad m0 => Const m (m0 a) -> m0 (Const m a) Исходный код

Traversable (K1 i c :: Тип -> Тип)

С тех пор как: base-4.9.0.0

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

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

Методы

traverse :: Applicative f => (a -> f b) -> K1 i c a -> f (K1 i c b) Исходный код

sequenceA :: Applicative f => K1 i c (f a) -> f (K1 i c a) Исходный код

mapM :: Монадный m => (a -> m b) -> K1 i c a -> m (K1 i c b) Исходный код

sequence :: Монадный m => K1 i c (m a) -> m (K1 i c a) Исходный код

(Traversable f, Traversable g) => Traversable (f :+: g)

С тех пор как: base-4.9.0.0

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

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

Методы

traverse :: Applicative f0 => (a -> f0 b) -> (f :+: g) a -> f0 ((f :+: g) b) Исходный код

sequenceA :: Applicative f0 => (f :+: g) (f0 a) -> f0 ((f :+: g) a) Исходный код

mapM :: Монадный m => (a -> m b) -> (f :+: g) a -> m ((f :+: g) b) Исходный код

sequence :: Монадный m => (f :+: g) (m a) -> m ((f :+: g) a) Исходный код

(Traversable f, Traversable g) => Traversable (f :*: g)

С тех пор как: base-4.9.0.0

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

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

Методы

traverse :: Applicative f0 => (a -> f0 b) -> (f :*: g) a -> f0 ((f :*: g) b) Исходный код

sequenceA :: Applicative f0 => (f :*: g) (f0 a) -> f0 ((f :*: g) a) Исходный код

mapM :: Монадный m => (a -> m b) -> (f :*: g) a -> m ((f :*: g) b) Исходный код

sequence :: Монадный m => (f :*: g) (m a) -> m ((f :*: g) a) Исходный код

(Traversable f, Traversable g) => Traversable (Sum f g)

С тех пор как: base-4.9.0.0

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

Определено в Data.Functor.Sum

Методы

traverse :: Applicative f0 => (a -> f0 b) -> Sum f g a -> f0 (Sum f g b) Source

sequenceA :: Applicative f0 => Sum f g (f0 a) -> f0 (Sum f g a) Source

mapM :: Monad m => (a -> m b) -> Sum f g a -> m (Sum f g b) Source

sequence :: Monad m => Sum f g (m a) -> m (Sum f g a) Source

(Traversable f, Traversable g) => Traversable (Product f g)

С момента версии: base-4.9.0.0

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

Определено в Data.Functor.Product

Методы

traverse :: Applicative f0 => (a -> f0 b) -> Product f g a -> f0 (Product f g b) Source

sequenceA :: Applicative f0 => Product f g (f0 a) -> f0 (Product f g a) Source

mapM :: Monad m => (a -> m b) -> Product f g a -> m (Product f g b) Source

sequence :: Monad m => Product f g (m a) -> m (Product f g a) Source

Traversable f => Traversable (M1 i c f)

С момента версии: base-4.9.0.0

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

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

Методы

traverse :: Applicative f0 => (a -> f0 b) -> M1 i c f a -> f0 (M1 i c f b) Source

sequenceA :: Applicative f0 => M1 i c f (f0 a) -> f0 (M1 i c f a) Source

mapM :: Monad m => (a -> m b) -> M1 i c f a -> m (M1 i c f b) Source

sequence :: Monad m => M1 i c f (m a) -> m (M1 i c f a) Source

(Traversable f, Traversable g) => Traversable (f :.: g)

С момента версии: base-4.9.0.0

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

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

Методы

traverse :: Applicative f0 => (a -> f0 b) -> (f :.: g) a -> f0 ((f :.: g) b) Source

sequenceA :: Applicative f0 => (f :.: g) (f0 a) -> f0 ((f :.: g) a) Source

mapM :: Monad m => (a -> m b) -> (f :.: g) a -> m ((f :.: g) b) Source

sequence :: Monad m => (f :.: g) (m a) -> m ((f :.: g) a) Source

(Traversable f, Traversable g) => Traversable (Compose f g)

С момента версии: base-4.9.0.0

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

Определено в Data.Functor.Compose

Методы

traverse :: Applicative f0 => (a -> f0 b) -> Compose f g a -> f0 (Compose f g b) Источник

sequenceA :: Applicative f0 => Compose f g (f0 a) -> f0 (Compose f g a) Источник

mapM :: Monad m => (a -> m b) -> Compose f g a -> m (Compose f g b) Источник

sequence :: Monad m => Compose f g (m a) -> m (Compose f g a) Источник

Вспомогательные функции

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

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

forM :: (Traversable t, Monad m) => t a -> (a -> m b) -> m (t b) Источник

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

mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) Источник

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

mapAccumR :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) Источник

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

Общие определения для методов суперкласса

fmapDefault :: forall t a b. Traversable t => (a -> b) -> t a -> t b Источник

Эта функция может быть использована в качестве значения для fmap в экземпляре Functor, при условии, что traverse определено. (Использование fmapDefault с экземпляром Traversable , определённым только sequenceA , приведёт к бесконечной рекурсии.)

fmapDefault f ≡ runIdentity . traverse (Identity . f)

foldMapDefault :: forall t m a. (Traversable t, Monoid m) => (a -> m) -> t a -> m Источник

Эта функция может быть использована в качестве значения для foldMap в экземпляре Foldable.

foldMapDefault f ≡ getConst . traverse (Const . f)

© 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-Traversable.html

Spec-Zone.ru

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