Control.Applicative
| Авторские права | Конор МакБрайд и Росс Патерсон 2005 |
|---|---|
| Лицензия | Лицензия BSD (см. файл LICENSE в дистрибутиве) |
| Поддержка | libraries@haskell.org |
| Стабильность | экспериментальная |
| Переносимость | переносимая |
| Безопасный Haskell | Надёжный |
| Язык | Haskell2010 |
Описание
Этот модуль описывает структуру, промежуточную между функтором и монадой (технически, сильный слабый моноидальный функтор). По сравнению с монадами, этот интерфейс не обладает полной мощностью операции связывания >>=, но
- он имеет больше примеров.
- он достаточен для многих применений, например, для контекстно-свободного разбора или класса
Traversable. - примеры могут проводить анализ вычислений до их выполнения и, таким образом, производить оптимизации с общим использованием.
Этот интерфейс был введён для парсеров Никласом Рёйемо, потому что он допускает больше совместного использования, чем монадический интерфейс. Названия здесь в основном основаны на работе по разбору Доайсе Свиерстры.
Для получения более подробной информации см. Прикладное программирование со эффектами, Конор МакБрайд и Росс Патерсон.
Прикладные функторы
class Functor f => Applicative f where Источник
Функтор с применением, обеспечивающий операции для
- встраивания чистых выражений (
pure), и - последовательного выполнения вычислений и объединения их результатов (
<*>иliftA2).
Минимальное полное определение должно включать реализации pure и любой из <*> или liftA2. Если оба определены, они должны вести себя так же, как и их стандартные определения:
(<*>) = liftA2 id
liftA2 f x y = f <$> x <*> y
Кроме того, любое определение должно удовлетворять следующим условиям:
- Тождество
pure id <*> v = v
- Композиция
pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
- Гомоморфизм
pure f <*> pure x = pure (f x)
- Перестановка
u <*> pure y = pure ($ y) <*> u
Другие методы имеют следующие стандартные определения, которые могут быть переопределены эквивалентными специализированными реализациями:
Вследствие этих законов, пример Functor для f будет удовлетворять
Может быть полезно отметить, что предполагая
forall x y. p (q x y) = f x . g y
следует из вышеизложенного, что
liftA2 p (liftA2 q u v) = liftA2 f u . liftA2 g v
Если f также является Monad, оно должно удовлетворять
(что подразумевает, что pure и <*> удовлетворяют законам прикладного функтора).
Методы
Поднять значение.
(<*>) :: f (a -> b) -> f a -> f b infixl 4 Источник
Последовательное применение.
Некоторые функторы поддерживают реализацию <*> более эффективную, чем стандартная.
Используя ApplicativeDo: 'fs <*> as' можно рассматривать как выражение do
do f <- fs a <- as pure (f a)
liftA2 :: (a -> b -> c) -> f a -> f b -> f c Источник
Поднять бинарную функцию для действий.
Некоторые функторы поддерживают реализацию liftA2 более эффективную, чем стандартную. В частности, если fmap — это дорогостоящая операция, лучше использовать liftA2 вместо fmap над структурой, а затем использовать <*>.
Этот метод стал методом класса в 4.10.0.0. До этого это была функция, определённая через <*> и fmap.
Используя ApplicativeDo: 'liftA2 f as bs' можно рассматривать как выражение do
do a <- as b <- bs pure (f a b)
(*>) :: f a -> f b -> f b infixl 4 Источник
Последовательное выполнение действий, отбрасывая значение первого аргумента.
'as *> bs' можно рассматривать как выражение do
do as bs
Это немного сложно для нашего ApplicativeDo расширения, которое предоставит ограничение Monad. Для ограничения Applicative мы напишем его в виде
do _ <- as b <- bs pure b
(<*) :: f a -> f b -> f a infixl 4 Источник
Последовательное выполнение действий, отбрасывая значение второго аргумента.
Используя ApplicativeDo: 'as <* bs' можно рассматривать как выражение do
do a <- as bs pure a
Экземпляры
| Applicative [] | С версии: base-2.1 |
Определено в GHC.Base Методыpure :: a -> [a] Исходный код (<*>) :: [a -> b] -> [a] -> [b] Исходный код liftA2 :: (a -> b -> c) -> [a] -> [b] -> [c] Исходный код (*>) :: [a] -> [b] -> [b] Исходный код (<*) :: [a] -> [b] -> [a] Исходный код | |
| Applicative Maybe | С версии: base-2.1 |
Определено в GHC.Base Методыpure :: a -> Maybe a Исходный код (<*>) :: Maybe (a -> b) -> Maybe a -> Maybe b Исходный код liftA2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c Исходный код (*>) :: Maybe a -> Maybe b -> Maybe b Исходный код (<*) :: Maybe a -> Maybe b -> Maybe a Исходный код | |
| Applicative IO | С версии: base-2.1 |
Определено в GHC.Base Методыpure :: a -> IO a Исходный код (<*>) :: IO (a -> b) -> IO a -> IO b Исходный код liftA2 :: (a -> b -> c) -> IO a -> IO b -> IO c Исходный код (*>) :: IO a -> IO b -> IO b Исходный код (<*) :: IO a -> IO b -> IO a Исходный код | |
| Applicative Par1 | С версии: base-4.9.0.0 |
Определено в GHC.Generics Методыpure :: a -> Par1 a Исходный код (<*>) :: Par1 (a -> b) -> Par1 a -> Par1 b Исходный код liftA2 :: (a -> b -> c) -> Par1 a -> Par1 b -> Par1 c Исходный код (*>) :: Par1 a -> Par1 b -> Par1 b Исходный код (<*) :: Par1 a -> Par1 b -> Par1 a Исходный код | |
| Applicative NonEmpty | С версии: base-4.9.0.0 |
Определено в GHC.Base Методыpure :: a -> NonEmpty a Исходный код (<*>) :: NonEmpty (a -> b) -> NonEmpty a -> NonEmpty b Исходный код liftA2 :: (a -> b -> c) -> NonEmpty a -> NonEmpty b -> NonEmpty c Исходный код (*>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Исходный код (<*) :: NonEmpty a -> NonEmpty b -> NonEmpty a Исходный код | |
| Applicative NoIO | С версии: base-4.8.0.0 |
| Applicative ReadP | С версии: base-4.6.0.0 |
Определено в Text.ParserCombinators.ReadP | |
| Applicative ReadPrec | С версии: base-4.6.0.0 |
Определено в Text.ParserCombinators.ReadPrec | |
| Applicative Down | С версии: base-4.11.0.0 |
| Applicative Product | С версии: base-4.8.0.0 |
| Applicative STM | С момента: base-4.8.0.0 |
Определено в GHC.Conc.Sync Методыpure :: a -> STM a Исходный код (<*>) :: STM (a -> b) -> STM a -> STM b Исходный код liftA2 :: (a -> b -> c) -> STM a -> STM b -> STM c Исходный код (*>) :: STM a -> STM b -> STM b Исходный код (<*) :: STM a -> STM b -> STM a Исходный код | |
| Applicative Identity | С момента: base-4.8.0.0 |
Определено в Data.Functor.Identity Методыpure :: a -> Identity a Исходный код (<*>) :: Identity (a -> b) -> Identity a -> Identity b Исходный код liftA2 :: (a -> b -> c) -> Identity a -> Identity b -> Identity c Исходный код (*>) :: Identity a -> Identity b -> Identity b Исходный код (<*) :: Identity a -> Identity b -> Identity a Исходный код | |
| Applicative ZipList |
f <$> ZipList xs1 <*> ... <*> ZipList xsN
= ZipList (zipWithN f xs1 ... xsN)
где (\a b c -> stimes c [a, b]) <$> ZipList "abcd" <*> ZipList "567" <*> ZipList [1..]
= ZipList (zipWith3 (\a b c -> stimes c [a, b]) "abcd" "567" [1..])
= ZipList {getZipList = ["a5","b6b6","c7c7c7"]}
С момента: base-2.1 |
Определено в Control.Applicative Методыpure :: a -> ZipList a Исходный код (<*>) :: ZipList (a -> b) -> ZipList a -> ZipList b Исходный код liftA2 :: (a -> b -> c) -> ZipList a -> ZipList b -> ZipList c Исходный код (*>) :: ZipList a -> ZipList b -> ZipList b Исходный код (<*) :: ZipList a -> ZipList b -> ZipList a Исходный код | |
| Applicative Option | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Option a Исходный код (<*>) :: Option (a -> b) -> Option a -> Option b Исходный код liftA2 :: (a -> b -> c) -> Option a -> Option b -> Option c Исходный код (*>) :: Option a -> Option b -> Option b Исходный код (<*) :: Option a -> Option b -> Option a Исходный код | |
| Applicative Last | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Last a Исходный код (<*>) :: Last (a -> b) -> Last a -> Last b Исходный код liftA2 :: (a -> b -> c) -> Last a -> Last b -> Last c Исходный код (*>) :: Last a -> Last b -> Last b Исходный код (<*) :: Last a -> Last b -> Last a Исходный код | |
| Applicative First | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> First a Исходный код (<*>) :: First (a -> b) -> First a -> First b Исходный код liftA2 :: (a -> b -> c) -> First a -> First b -> First c Исходный код (*>) :: First a -> First b -> First b Исходный код (<*) :: First a -> First b -> First a Исходный код | |
| Applicative Max | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Max a Исходный код (<*>) :: Max (a -> b) -> Max a -> Max b Исходный код liftA2 :: (a -> b -> c) -> Max a -> Max b -> Max c Исходный код (*>) :: Max a -> Max b -> Max b Исходный код (<*) :: Max a -> Max b -> Max a Исходный код | |
| Applicative Min | С момента: base-4.9.0.0 |
Определено в Data.Semigroup Методыpure :: a -> Min a Исходный код (<*>) :: Min (a -> b) -> Min a -> Min b Исходный код liftA2 :: (a -> b -> c) -> Min a -> Min b -> Min c Исходный код (*>) :: Min a -> Min b -> Min b Исходный код (<*) :: Min a -> Min b -> Min a Исходный код | |
| Applicative Complex | С момента: base-4.9.0.0 |
Определено в Data.Complex Методыpure :: a -> Complex a Исходный код (<*>) :: Complex (a -> b) -> Complex a -> Complex b Исходный код liftA2 :: (a -> b -> c) -> Complex a -> Complex b -> Complex c Исходный код (*>) :: Complex a -> Complex b -> Complex b Исходный код (<*) :: Complex a -> Complex b -> Complex a Исходный код | |
| Applicative (Either e) | С момента выпуска: base-3.0 |
Определено в Data.Either Методыpure :: a -> Either e a Исходный код (<*>) :: Either e (a -> b) -> Either e a -> Either e b Исходный код liftA2 :: (a -> b -> c) -> Either e a -> Either e b -> Either e c Исходный код (*>) :: Either e a -> Either e b -> Either e b Исходный код (<*) :: Either e a -> Either e b -> Either e a Исходный код | |
| Applicative (U1 :: Тип -> Тип) | С момента выпуска: base-4.9.0.0 |
Определено в GHC.Generics Методыpure :: a -> U1 a Исходный код (<*>) :: U1 (a -> b) -> U1 a -> U1 b Исходный код liftA2 :: (a -> b -> c) -> U1 a -> U1 b -> U1 c Исходный код (*>) :: U1 a -> U1 b -> U1 b Исходный код (<*) :: U1 a -> U1 b -> U1 a Исходный код | |
| Моноид a => Applicative ((,) a) |
Для кортежей ограничение ("hello ", (+15)) <*> ("world!", 2002)
("hello world!",2017)
С момента выпуска: base-2.1 |
Определено в GHC.Base Методыpure :: a0 -> (a, a0) Исходный код (<*>) :: (a, a0 -> b) -> (a, a0) -> (a, b) Исходный код liftA2 :: (a0 -> b -> c) -> (a, a0) -> (a, b) -> (a, c) Исходный код (*>) :: (a, a0) -> (a, b) -> (a, b) Исходный код (<*) :: (a, a0) -> (a, b) -> (a, a0) Исходный код | |
| Applicative (ST s) | С момента выпуска: base-4.4.0.0 |
Определено в GHC.ST Методыpure :: a -> ST s a Исходный код (<*>) :: ST s (a -> b) -> ST s a -> ST s b Исходный код liftA2 :: (a -> b -> c) -> ST s a -> ST s b -> ST s c Исходный код (*>) :: ST s a -> ST s b -> ST s b Исходный код (<*) :: ST s a -> ST s b -> ST s a Исходный код | |
Определено в GHC.Generics Методыpure :: a -> Rec1 f a Исходный код (<*>) :: Rec1 f (a -> b) -> Rec1 f a -> Rec1 f b Исходный код liftA2 :: (a -> b -> c) -> Rec1 f a -> Rec1 f b -> Rec1 f c Исходный код (*>) :: Rec1 f a -> Rec1 f b -> Rec1 f b Исходный код (<*) :: Rec1 f a -> Rec1 f b -> Rec1 f a Исходный код | |
| (Monoid a, Monoid b) => Applicative ((,,) a b) | С момента: base-4.14.0.0 |
Определено в GHC.Base Методыpure :: a0 -> (a, b, a0) Исходный код (<*>) :: (a, b, a0 -> b0) -> (a, b, a0) -> (a, b, b0) Исходный код liftA2 :: (a0 -> b0 -> c) -> (a, b, a0) -> (a, b, b0) -> (a, b, c) Исходный код (*>) :: (a, b, a0) -> (a, b, b0) -> (a, b, b0) Исходный код (<*) :: (a, b, a0) -> (a, b, b0) -> (a, b, a0) Исходный код | |
| Applicative f => Applicative (Alt f) | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методыpure :: a -> Alt f a Исходный код (<*>) :: Alt f (a -> b) -> Alt f a -> Alt f b Исходный код liftA2 :: (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c Исходный код (*>) :: Alt f a -> Alt f b -> Alt f b Исходный код (<*) :: Alt f a -> Alt f b -> Alt f a Исходный код | |
| Applicative f => Applicative (Ap f) | С момента: base-4.12.0.0 |
Определено в Data.Monoid Методыpure :: a -> Ap f a Исходный код (<*>) :: Ap f (a -> b) -> Ap f a -> Ap f b Исходный код liftA2 :: (a -> b -> c) -> Ap f a -> Ap f b -> Ap f c Исходный код (*>) :: Ap f a -> Ap f b -> Ap f b Исходный код (<*) :: Ap f a -> Ap f b -> Ap f a Исходный код | |
| Monoid m => Applicative (Const m :: Тип -> Тип) | С момента: base-2.0.1 |
Определено в Data.Functor.Const Методыpure :: a -> Const m a Исходный код (<*>) :: Const m (a -> b) -> Const m a -> Const m b Исходный код liftA2 :: (a -> b -> c) -> Const m a -> Const m b -> Const m c Исходный код (*>) :: Const m a -> Const m b -> Const m b Исходный код (<*) :: Const m a -> Const m b -> Const m a Исходный код | |
| Applicative m => Applicative (Kleisli m a) | С момента: base-4.14.0.0 |
Определено в Control.Arrow Методыpure :: a0 -> Kleisli m a a0 Исходный код (<*>) :: Kleisli m a (a0 -> b) -> Kleisli m a a0 -> Kleisli m a b Исходный код liftA2 :: (a0 -> b -> c) -> Kleisli m a a0 -> Kleisli m a b -> Kleisli m a c Исходный код (*>) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a b Исходный код (<*) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a a0 Исходный код | |
| Arrow a => Applicative (WrappedArrow a b) | С момента: base-2.1 |
Определено в Control.Applicative Методыpure :: a0 -> WrappedArrow a b a0 Исходный код (<*>) :: WrappedArrow a b (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Исходный код liftA2 :: (a0 -> b0 -> c) -> WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b c Исходный код (*>) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b b0 Исходный код (<*) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Исходный код | |
| Applicative ((->) r :: Тип -> Тип) | С момента: base-2.1 |
Определено в GHC.Base Методыpure :: a -> r -> a Исходный код (<*>) :: (r -> (a -> b)) -> (r -> a) -> r -> b Исходный код liftA2 :: (a -> b -> c) -> (r -> a) -> (r -> b) -> r -> c Исходный код (*>) :: (r -> a) -> (r -> b) -> r -> b Исходный код (<*) :: (r -> a) -> (r -> b) -> r -> a Исходный код | |
| Моноид c => Applicative (K1 i c :: Тип -> Тип) | С момента: base-4.12.0.0 |
| (Applicative f, Applicative g) => Applicative (f :*: g) | С момента: base-4.9.0.0 |
| (Моноид a, Моноид b, Моноид c) => Applicative ((,,,) a b c) | С момента: base-4.14.0.0 |
Определено в GHC.Base Методыpure :: a0 -> (a, b, c, a0) Источник (<*>) :: (a, b, c, a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Источник liftA2 :: (a0 -> b0 -> c0) -> (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, c0) Источник (*>) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, b0) Источник (<*) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, a0) Источник | |
| (Applicative f, Applicative g) => Applicative (Product f g) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Product Методыpure :: a -> Product f g a Источник (<*>) :: Product f g (a -> b) -> Product f g a -> Product f g b Источник liftA2 :: (a -> b -> c) -> Product f g a -> Product f g b -> Product f g c Источник (*>) :: Product f g a -> Product f g b -> Product f g b Источник (<*) :: Product f g a -> Product f g b -> Product f g a Источник | |
| Applicative f => Applicative (M1 i c f) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методыpure :: a -> M1 i c f a Исходный код (<*>) :: M1 i c f (a -> b) -> M1 i c f a -> M1 i c f b Исходный код liftA2 :: (a -> b -> c0) -> M1 i c f a -> M1 i c f b -> M1 i c f c0 Исходный код (*>) :: M1 i c f a -> M1 i c f b -> M1 i c f b Исходный код (<*) :: M1 i c f a -> M1 i c f b -> M1 i c f a Исходный код | |
| (Applicative f, Applicative g) => Applicative (f :.: g) | С версии: base-4.9.0.0 |
Определено в GHC.Generics Методыpure :: a -> (f :.: g) a Исходный код (<*>) :: (f :.: g) (a -> b) -> (f :.: g) a -> (f :.: g) b Исходный код liftA2 :: (a -> b -> c) -> (f :.: g) a -> (f :.: g) b -> (f :.: g) c Исходный код (*>) :: (f :.: g) a -> (f :.: g) b -> (f :.: g) b Исходный код (<*) :: (f :.: g) a -> (f :.: g) b -> (f :.: g) a Исходный код | |
| (Applicative f, Applicative g) => Applicative (Compose f g) | С версии: base-4.9.0.0 |
Определено в Data.Functor.Compose Методыpure :: a -> Compose f g a Исходный код (<*>) :: Compose f g (a -> b) -> Compose f g a -> Compose f g b Исходный код liftA2 :: (a -> b -> c) -> Compose f g a -> Compose f g b -> Compose f g c Исходный код (*>) :: Compose f g a -> Compose f g b -> Compose f g b Исходный код (<*) :: Compose f g a -> Compose f g b -> Compose f g a Исходный код | |
Альтернативы
class Applicative f => Alternative f where Исходный код
Моноид на функциональных конструкторах.
Если определено, some и many должны быть наименьшими решениями уравнений:
Методы
empty :: f a Исходный код
Идентификатор <|>
(<|>) :: f a -> f a -> f a infixl 3 Исходный код
Ассоциативная бинарная операция
some :: f a -> f [a] Исходный код
Один или более.
many :: f a -> f [a] Исходный код
Ноль или более.
Экземпляры
| Alternative [] | С версии: base-2.1 |
| Alternative Maybe | С версии: base-2.1 |
| Alternative IO | С версии: base-4.9.0.0 |
| Alternative ReadP | С версии: base-4.6.0.0 |
| Alternative ReadPrec | С версии: base-4.6.0.0 |
| Alternative STM | С версии: base-4.8.0.0 |
| Alternative ZipList | С версии: base-4.11.0.0 |
| Alternative f => Alternative (Rec1 f) | Since: base-4.9.0.0 |
| Alternative f => Alternative (Alt f) | Since: base-4.8.0.0 |
| Alternative f => Alternative (Ap f) | Since: base-4.12.0.0 |
| Alternative m => Alternative (Kleisli m a) | Since: base-4.14.0.0 |
| (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) | Since: base-2.1 |
Defined in Control.Applicative Methodsempty :: WrappedArrow a b a0 Source (<|>) :: WrappedArrow a b a0 -> WrappedArrow a b a0 -> WrappedArrow a b a0 Source some :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source many :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source | |
| (Alternative f, Alternative g) => Alternative (f :*: g) | Since: base-4.9.0.0 |
Определено в GHC.Generics Краткое описание методовempty :: (f :*: g) a Исходный код (<|>) :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a Исходный код some :: (f :*: g) a -> (f :*: g) [a] Исходный код many :: (f :*: g) a -> (f :*: g) [a] Исходный код | |
| (Alternative f, Alternative g) => Alternative (Product f g) | С версии: base-4.9.0.0 |
Определено в Data.Functor.Product Краткое описание методовempty :: Product f g a Исходный код (<|>) :: Product f g a -> Product f g a -> Product f g a Исходный код some :: Product f g a -> Product f g [a] Исходный код many :: Product f g a -> Product f g [a] Исходный код | |
| Alternative f => Alternative (M1 i c f) | С версии: base-4.9.0.0 |
Определено в GHC.Generics Краткое описание методовempty :: M1 i c f a Исходный код (<|>) :: M1 i c f a -> M1 i c f a -> M1 i c f a Исходный код some :: M1 i c f a -> M1 i c f [a] Исходный код many :: M1 i c f a -> M1 i c f [a] Исходный код | |
| (Alternative f, Applicative g) => Alternative (f :.: g) | С версии: base-4.9.0.0 |
Определено в GHC.Generics Краткое описание методовempty :: (f :.: g) a Исходный код (<|>) :: (f :.: g) a -> (f :.: g) a -> (f :.: g) a Исходный код some :: (f :.: g) a -> (f :.: g) [a] Исходный код many :: (f :.: g) a -> (f :.: g) [a] Исходный код | |
| (Alternative f, Applicative g) => Alternative (Compose f g) | С версии: base-4.9.0.0 |
Определено в Data.Functor.Compose Краткое описание методовempty :: Compose f g a Исходный код (<|>) :: Compose f g a -> Compose f g a -> Compose f g a Исходный код some :: Compose f g a -> Compose f g [a] Исходный код many :: Compose f g a -> Compose f g [a] Исходный код | |
Реализации
newtype Const a b Исходный код
The Const functor.
Реализации
| Generic1 (Const a :: k -> Type) | Since: base-4.9.0.0 |
| Show2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 |
Определено в Data.Functor.Classes | |
| Read2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 |
Определено в Data.Functor.Classes МетодыliftReadsPrec2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> Int -> ReadS (Const a b) Source liftReadList2 :: (Int -> ReadS a) -> ReadS [a] -> (Int -> ReadS b) -> ReadS [b] -> ReadS [Const a b] Source liftReadPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec (Const a b) Source liftReadListPrec2 :: ReadPrec a -> ReadPrec [a] -> ReadPrec b -> ReadPrec [b] -> ReadPrec [Const a b] Source | |
| Ord2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 |
Определено в Data.Functor.Classes | |
| Eq2 (Const :: Type -> Type -> Type) | Since: base-4.9.0.0 |
| Bifunctor (Const :: Type -> Type -> Type) | Since: base-4.8.0.0 |
Определено в Data.Bifunctor Методыbimap :: (a -> b) -> (c -> d) -> Const a c -> Const b d Исходный код first :: (a -> b) -> Const a c -> Const b c Исходный код second :: (b -> c) -> Const a b -> Const a c Исходный код | |
| Bifoldable (Const :: Тип -> Тип -> Тип) | С момента: 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 Исходный код | |
| Bitraversable (Const :: Тип -> Тип -> Тип) | С момента: base-4.10.0.0 |
Определено в Data.Bitraversable Методыbitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Const a b -> f (Const c d) Исходный код | |
| Functor (Const m :: Тип -> Тип) | С момента: base-2.1 |
Определено в Data.Functor.Const Методыfmap :: (a -> b) -> Const m a -> Const m b Исходный код (<$) :: a -> Const m b -> Const m a Исходный код | |
| Monoid m => Applicative (Const m :: Тип -> Тип) | С момента: base-2.0.1 |
Определено в Data.Functor.Const Методыpure :: a -> Const m a Исходный код (<*>) :: Const m (a -> b) -> Const m a -> Const m b Исходный код liftA2 :: (a -> b -> c) -> Const m a -> Const m b -> Const m c Исходный код (*>) :: Const m a -> Const m b -> Const m b Исходный код (<*) :: Const m a -> Const m b -> Const m a Исходный код | |
| Foldable (Const m :: Тип -> Тип) | С момента: base-4.7.0.0 |
Определено в Data.Functor.Const Методыfold :: Monoid m0 => Const m m0 -> m0 Исходный код foldMap :: Monoid m0 => (a -> m0) -> Const m a -> m0 Исходный код foldMap' :: Monoid m0 => (a -> m0) -> Const m a -> m0 Исходный код foldr :: (a -> b -> b) -> b -> Const m a -> b Исходный код foldr' :: (a -> b -> b) -> b -> Const m a -> b Исходный код foldl :: (b -> a -> b) -> b -> Const m a -> b Исходный код foldl' :: (b -> a -> b) -> b -> Const m a -> b Исходный код foldr1 :: (a -> a -> a) -> Const m a -> a Исходный код foldl1 :: (a -> a -> a) -> Const m a -> a Исходный код toList :: Const m a -> [a] Исходный код null :: Const m a -> Bool Исходный код length :: Const m a -> Int Исходный код elem :: Eq a => a -> Const m a -> Bool Исходный код maximum :: Ord a => Const m a -> a Исходный код minimum :: Ord a => Const m a -> a Исходный код sum :: Num a => Const m a -> a Исходный код product :: Num a => Const m a -> a Исходный код | |
| Traversable (Const m :: Тип -> Тип) | С: 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) Исходный код | |
| Show a => Show1 (Const a :: Тип -> Тип) | С: base-4.9.0.0 |
Определено в Data.Functor.Classes МетодыliftShowsPrec :: (Int -> a0 -> ShowS) -> ([a0] -> ShowS) -> Int -> Const a a0 -> ShowS Исходный код liftShowList :: (Int -> a0 -> ShowS) -> ([a0] -> ShowS) -> [Const a a0] -> ShowS Исходный код | |
| Read a => Read1 (Const a :: Тип -> Тип) | С: base-4.9.0.0 |
| Eq a => Eq (Const a b) | Since: base-4.9.0.0 |
| Floating a => Floating (Const a b) | Since: base-4.9.0.0 |
Defined in Data.Functor.Const Methodsexp :: Const a b -> Const a b Source log :: Const a b -> Const a b Source sqrt :: Const a b -> Const a b Source (**) :: Const a b -> Const a b -> Const a b Source logBase :: Const a b -> Const a b -> Const a b Source sin :: Const a b -> Const a b Source cos :: Const a b -> Const a b Source tan :: Const a b -> Const a b Source asin :: Const a b -> Const a b Source acos :: Const a b -> Const a b Source atan :: Const a b -> Const a b Source sinh :: Const a b -> Const a b Source cosh :: Const a b -> Const a b Source tanh :: Const a b -> Const a b Source asinh :: Const a b -> Const a b Source acosh :: Const a b -> Const a b Source atanh :: Const a b -> Const a b Source log1p :: Const a b -> Const a b Source expm1 :: Const a b -> Const a b Source | |
| Fractional a => Fractional (Const a b) | Since: base-4.9.0.0 |
| Integral a => Integral (Const a b) | Since: base-4.9.0.0 |
Defined in Data.Functor.Const Methodsquot :: Const a b -> Const a b -> Const a b Source rem :: Const a b -> Const a b -> Const a b Source div :: Const a b -> Const a b -> Const a b Source mod :: Const a b -> Const a b -> Const a b Source quotRem :: Const a b -> Const a b -> (Const a b, Const a b) Source divMod :: Const a b -> Const a b -> (Const a b, Const a b) Source | |
| (Typeable k, Data a, Typeable b) => Data (Const a b) | Since: base-4.10.0.0 |
Defined in Data.Data Methodsgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Const a b -> c (Const a b) Source gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Const a b) Source toConstr :: Const a b -> Constr Source dataTypeOf :: Const a b -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Const a b)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Const a b)) Source gmapT :: (forall b0. Data b0 => b0 -> b0) -> Const a b -> Const a b Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r Source gmapQ :: (forall d. Data d => d -> u) -> Const a b -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> Const a b -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Source | |
| Num a => Num (Const a b) | Since: base-4.9.0.0 |
Определено в Data.Functor.Const МетодыsizeOf :: Const a b -> Int Исходный код alignment :: Const a b -> Int Исходный код peekElemOff :: Ptr (Const a b) -> Int -> IO (Const a b) Исходный код pokeElemOff :: Ptr (Const a b) -> Int -> Const a b -> IO () Исходный код peekByteOff :: Ptr b0 -> Int -> IO (Const a b) Исходный код pokeByteOff :: Ptr b0 -> Int -> Const a b -> IO () Исходный код | |
| type Rep1 (Const a :: k -> Type) | |
Определено в Data.Functor.Const | |
| type Rep (Const a b) | |
Определено в Data.Functor.Const | |
newtype ОборачиваемыйМонад m a Исходный код
Конструкторы
| ОбернутьМонад | |
Поля
| |
Примеры реализации
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> WrappedMonad m a -> c (WrappedMonad m a) Исходный код gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (WrappedMonad m a) Исходный код toConstr :: WrappedMonad m a -> Constr Исходный код dataTypeOf :: WrappedMonad m a -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (WrappedMonad m a)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (WrappedMonad m a)) Исходный код gmapT :: (forall b. Data b => b -> b) -> WrappedMonad m a -> WrappedMonad m a Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> WrappedMonad m a -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> WrappedMonad m a -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> WrappedMonad m a -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> WrappedMonad m a -> u Исходный код gmapM :: Monad m0 => (forall d. Data d => d -> m0 d) -> WrappedMonad m a -> m0 (WrappedMonad m a) Исходный код gmapMp :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> WrappedMonad m a -> m0 (WrappedMonad m a) Исходный код gmapMo :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> WrappedMonad m a -> m0 (WrappedMonad m a) Исходный код | |
| Generic (WrappedMonad m a) | С: base-4.7.0.0 |
Определено в Control.Applicative Связанные типыtype Rep (WrappedMonad m a) :: Type -> Type Исходный код Методыfrom :: WrappedMonad m a -> Rep (WrappedMonad m a) x Исходный код to :: Rep (WrappedMonad m a) x -> WrappedMonad m a Исходный код | |
| type Rep1 (WrappedMonad m :: Type -> Type) | |
Определено в Control.Applicative type Rep1 (WrappedMonad m :: Type -> Type) = D1 ('MetaData "WrappedMonad" "Control.Applicative" "base" 'True) (C1 ('MetaCons "WrapMonad" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonad") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 m))) | |
| type Rep (WrappedMonad m a) | |
Определено в Control.Applicative type Rep (WrappedMonad m a) = D1 ('MetaData "WrappedMonad" "Control.Applicative" "base" 'True) (C1 ('MetaCons "WrapMonad" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonad") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (m a)))) |
newtype WrappedArrow a b c Source
Конструкторы
| WrapArrow | |
Поля
| |
Экземпляры
| Generic1 (WrappedArrow a b :: Type -> Type) | С версии: base-4.7.0.0 |
Определено в Control.Applicative Связанные типыtype Rep1 (WrappedArrow a b) :: k -> Type Source Методыfrom1 :: forall (a0 :: k). WrappedArrow a b a0 -> Rep1 (WrappedArrow a b) a0 Source to1 :: forall (a0 :: k). Rep1 (WrappedArrow a b) a0 -> WrappedArrow a b a0 Source | |
| Arrow a => Functor (WrappedArrow a b) | С версии: base-2.1 |
Определено в Control.Applicative Методыfmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source (<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source | |
| Arrow a => Applicative (WrappedArrow a b) | С версии: base-2.1 |
Определено в Control.Applicative Методыpure :: a0 -> WrappedArrow a b a0 Source (<*>) :: WrappedArrow a b (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source liftA2 :: (a0 -> b0 -> c) -> WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b c Source (*>) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b b0 Source (<*) :: WrappedArrow a b a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source | |
| (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) | С версии: base-2.1 |
Определено в Control.Applicative Методыempty :: WrappedArrow a b a0 Source (<|>) :: WrappedArrow a b a0 -> WrappedArrow a b a0 -> WrappedArrow a b a0 Source some :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source many :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Source | |
| (Typeable a, Typeable b, Typeable c, Data (a b c)) => Data (WrappedArrow a b c) | С версии: base-4.14.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b0. Data d => c0 (d -> b0) -> d -> c0 b0) -> (forall g. g -> c0 g) -> WrappedArrow a b c -> c0 (WrappedArrow a b c) Источник gunfold :: (forall b0 r. Data b0 => c0 (b0 -> r) -> c0 r) -> (forall r. r -> c0 r) -> Constr -> c0 (WrappedArrow a b c) Источник toConstr :: WrappedArrow a b c -> Constr Источник dataTypeOf :: WrappedArrow a b c -> DataType Источник dataCast1 :: Typeable t => (forall d. Data d => c0 (t d)) -> Maybe (c0 (WrappedArrow a b c)) Источник dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c0 (t d e)) -> Maybe (c0 (WrappedArrow a b c)) Источник gmapT :: (forall b0. Data b0 => b0 -> b0) -> WrappedArrow a b c -> WrappedArrow a b c Источник gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> WrappedArrow a b c -> r Источник gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> WrappedArrow a b c -> r Источник gmapQ :: (forall d. Data d => d -> u) -> WrappedArrow a b c -> [u] Источник gmapQi :: Int -> (forall d. Data d => d -> u) -> WrappedArrow a b c -> u Источник gmapM :: Monad m => (forall d. Data d => d -> m d) -> WrappedArrow a b c -> m (WrappedArrow a b c) Источник gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> WrappedArrow a b c -> m (WrappedArrow a b c) Источник gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> WrappedArrow a b c -> m (WrappedArrow a b c) Источник | |
| Generic (WrappedArrow a b c) | Since: base-4.7.0.0 |
Определено в Control.Applicative Связанные типыtype Rep (WrappedArrow a b c) :: Type -> Type Источник Методыfrom :: WrappedArrow a b c -> Rep (WrappedArrow a b c) x Источник to :: Rep (WrappedArrow a b c) x -> WrappedArrow a b c Источник | |
| type Rep1 (WrappedArrow a b :: Type -> Type) | |
Определено в Control.Applicative type Rep1 (WrappedArrow a b :: Type -> Type) = D1 ('MetaData "WrappedArrow" "Control.Applicative" "base" 'True) (C1 ('MetaCons "WrapArrow" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapArrow") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (a b)))) | |
| type Rep (WrappedArrow a b c) | |
Определено в Control.Applicative type Rep (WrappedArrow a b c) = D1 ('MetaData "WrappedArrow" "Control.Applicative" "base" 'True) (C1 ('MetaCons "WrapArrow" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapArrow") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a b c)))) |
Списки, но с функтором Applicative, основанным на сцеплении.
Конструкторы
| ZipList | |
Поля
| |
Экземпляры
| Functor ZipList | С версии: base-2.1 |
| Applicative ZipList |
f <$> ZipList xs1 <*> ... <*> ZipList xsN
= ZipList (zipWithN f xs1 ... xsN)
где (\a b c -> stimes c [a, b]) <$> ZipList "abcd" <*> ZipList "567" <*> ZipList [1..]
= ZipList (zipWith3 (\a b c -> stimes c [a, b]) "abcd" "567" [1..])
= ZipList {getZipList = ["a5","b6b6","c7c7c7"]}
С версии: base-2.1 |
Определено в Control.Applicative | |
| Foldable ZipList | С версии: base-4.9.0.0 |
Определено в Control.Applicative Методыfold :: Monoid m => ZipList m -> m Источник foldMap :: Monoid m => (a -> m) -> ZipList a -> m Источник foldMap' :: Monoid m => (a -> m) -> ZipList a -> m Источник foldr :: (a -> b -> b) -> b -> ZipList a -> b Источник foldr' :: (a -> b -> b) -> b -> ZipList a -> b Источник foldl :: (b -> a -> b) -> b -> ZipList a -> b Источник foldl' :: (b -> a -> b) -> b -> ZipList a -> b Источник foldr1 :: (a -> a -> a) -> ZipList a -> a Источник foldl1 :: (a -> a -> a) -> ZipList a -> a Источник toList :: ZipList a -> [a] Источник null :: ZipList a -> Bool Источник length :: ZipList a -> Int Источник elem :: Eq a => a -> ZipList a -> Bool Источник maximum :: Ord a => ZipList a -> a Источник minimum :: Ord a => ZipList a -> a Источник | |
| Traversable ZipList | С версии: base-4.9.0.0 |
Определено в Data.Traversable Методыtraverse :: Applicative f => (a -> f b) -> ZipList a -> f (ZipList b) Исходный код sequenceA :: Applicative f => ZipList (f a) -> f (ZipList a) Исходный код mapM :: Monad m => (a -> m b) -> ZipList a -> m (ZipList b) Исходный код sequence :: Monad m => ZipList (m a) -> m (ZipList a) Исходный код | |
| Alternative ZipList | С момента: base-4.11.0.0 |
Определено в Control.Applicative Методыempty :: ZipList a Исходный код (<|>) :: ZipList a -> ZipList a -> ZipList a Исходный код some :: ZipList a -> ZipList [a] Исходный код many :: ZipList a -> ZipList [a] Исходный код | |
| IsList (ZipList a) | С момента: base-4.15.0.0 |
Определено в GHC.Exts Связанные типыtype Item (ZipList a) Исходный код | |
| Eq a => Eq (ZipList a) | С момента: base-4.7.0.0 |
Определено в Control.Applicative Методы(==) :: ZipList a -> ZipList a -> Bool Исходный код (/=) :: ZipList a -> ZipList a -> Bool Исходный код | |
| Data a => Data (ZipList a) | С момента: base-4.14.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ZipList a -> c (ZipList a) Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ZipList a) Source toConstr :: ZipList a -> Constr Source dataTypeOf :: ZipList a -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ZipList a)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ZipList a)) Source gmapT :: (forall b. Data b => b -> b) -> ZipList a -> ZipList a Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r Source gmapQ :: (forall d. Data d => d -> u) -> ZipList a -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> ZipList a -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Source | |
| Ord a => Ord (ZipList a) | Since: base-4.7.0.0 |
Определено в Control.Applicative | |
| Read a => Read (ZipList a) | Since: base-4.7.0.0 |
Вспомогательные функции
(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 Source
Синоним infix для fmap.
Название этого оператора — аллюзия на $. Обратите внимание на сходство их типов:
($) :: (a -> b) -> a -> b (<$>) :: Functor f => (a -> b) -> f a -> f b
В то время как $ является применением функции, <$> — это применение функции, поднятое над Functor.
Примеры
Преобразование из Maybe Int в Maybe
String с помощью show:
>>> show <$> Nothing Nothing >>> show <$> Just 3 Just "3"
Преобразование из Either Int Int в Either Int String с помощью show:
>>> show <$> Left 17 Left 17 >>> show <$> Right 17 Right "17"
Удвоение каждого элемента списка:
>>> (*2) <$> [1,2,3] [2,4,6]
Применение even ко второму элементу пары:
>>> even <$> (2,2) (2,True)
(<$) :: Functor f => a -> f b -> f a infixl 4 Источник
Замена всех местоположений в входных данных одним значением. По умолчанию используется fmap . const, но может быть переопределено более эффективной версией.
Используя ApplicativeDo: 'a <$ bs' можно интерпретировать как выражение do
do bs pure a
с выведенным ограничением Functor.
(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 Источник
Вариант <*> с обратным порядком аргументов.
Используя ApplicativeDo: 'as <**> fs' можно интерпретировать как выражение do
do a <- as f <- fs pure (f a)
liftA :: Applicative f => (a -> b) -> f a -> f b Источник
Поднятие функции к действиям. Эта функция может быть использована как значение для fmap в экземпляре Functor.
| Используя ApplicativeDo: 'liftA f as' можно интерпретировать как выражение do
do a <- as pure (f a)
с выведенным ограничением Functor слабее, чем Applicative.
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d Источник
Поднятие тернарной функции к действиям.
Используя ApplicativeDo: 'liftA3 f as bs cs' можно интерпретировать как выражение do
do a <- as b <- bs c <- cs pure (f a b c)
optional :: Alternative f => f a -> f (МожетБыть a) Источник
Один или ни одного.
© 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/Control-Applicative.html