Control.Applicative
| Авторские права | Conor McBride and Ross Paterson 2005 |
|---|---|
| Лицензия | в стиле BSD (см. файл LICENSE в дистрибутиве) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | стабильный |
| Переносимость | переносимый |
| Безопасный Haskell | доверенный |
| Язык | Haskell2010 |
Описание
Этот модуль описывает структуру, промежуточную между функтором и монадой (технически — сильный слабый моноидальный функтор). По сравнению с монадами, в этом интерфейсе отсутствует вся мощь операции связывания >>=, однако
- у него больше экземпляров.
- его достаточно для многих применений, например для контекстно-свободного синтаксического анализа или класса
Traversable. - экземпляры могут анализировать вычисления до их выполнения и тем самым создавать общие оптимизации.
Этот интерфейс был введён для парсеров Никласом Рёьемо, поскольку он допускает больше совместного использования, чем монадический интерфейс. Приведённые здесь имена в основном основаны на работах Доайтсе Свирстры по синтаксическому анализу.
Подробнее см. Аппликативное программирование с эффектами Коннора Макбрайда и Росса Патерсона.
Аппликативные функторы
class Functor f => Applicative (f :: Type -> Type) 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 и <*> удовлетворяют законам аппликативных функторов).
Методы
Поднять значение в структуру.
Примеры
>>> pure 1 :: Maybe Int Just 1
>>> pure 'z' :: [Char] "z"
>>> pure (pure ":D") :: Maybe [String] Just [":D"]
(<*>) :: f (a -> b) -> f a -> f b infixl 4 Источник
Последовательное применение.
Для некоторых функторов реализация <*> эффективнее реализации по умолчанию.
Пример
В сочетании с (<$>) метод (<*>) можно использовать для создания записи.
>>> data MyState = MyState {arg1 :: Foo, arg2 :: Bar, arg3 :: Baz}
>>> produceFoo :: Applicative f => f Foo >>> produceBar :: Applicative f => f Bar >>> produceBaz :: Applicative f => f Baz
>>> mkState :: Applicative f => f MyState >>> mkState = MyState <$> produceFoo <*> produceBar <*> produceBaz
liftA2 :: (a -> b -> c) -> f a -> f b -> f c Источник
Поднять бинарную функцию до действий.
Для некоторых функторов реализация liftA2 эффективнее реализации по умолчанию. В частности, если fmap — дорогостоящая операция, вероятно, лучше использовать liftA2, чем применить fmap к структуре, а затем использовать <*>.
Этот метод стал методом класса типов в версии 4.10.0.0. До этого он был функцией, определённой через <*> и fmap.
Пример
>>> liftA2 (,) (Just 3) (Just 5) Just (3,5)
>>> liftA2 (+) [1, 2, 3] [4, 5, 6] [5,6,7,6,7,8,7,8,9]
(*>) :: f a -> f b -> f b infixl 4 Источник
Упорядочить действия, отбросив значение первого аргумента.
Примеры
В сочетании с аппликативным экземпляром для Maybe этот оператор позволяет связывать вычисления Maybe с возможным «досрочным возвратом» в случае Nothing.
>>> Just 2 *> Just 3 Just 3
>>> Nothing *> Just 3 Nothing
Разумеется, более интересный вариант применения — использовать вычисления с эффектами, а не просто возвращать чистые значения.
>>> import Data.Char
>>> import GHC.Internal.Text.ParserCombinators.ReadP
>>> let p = string "my name is " *> munch1 isAlpha <* eof
>>> readP_to_S p "my name is Simon"
[("Simon","")]
(<*) :: f a -> f b -> f a infixl 4 Источник
Упорядочить действия, отбросив значение второго аргумента.
Экземпляры
| Applicative Complex Источник | Начиная с: base-4.9.0.0 |
Определено в Data.Complex | |
| Applicative First Источник | Начиная с: base-4.9.0.0 |
| Applicative Last Источник | Начиная с: base-4.9.0.0 |
| Applicative Max Источник | Начиная с: base-4.9.0.0 |
| Applicative Min Источник | Начиная с: base-4.9.0.0 |
| Applicative NonEmpty Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.NonEmpty | |
| Applicative STM Источник | Начиная с: base-4.8.0.0 |
| Applicative Identity Источник | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.Data.Functor.Identity | |
| Applicative First Источник | Начиная с: base-4.8.0.0 |
| Applicative Last Источник | Начиная с: base-4.8.0.0 |
| Applicative Down Источник | Начиная с: base-4.11.0.0 |
| Applicative Dual Источник | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.Data.Semigroup.Internal Методыpure :: a -> Dual a Исходный код (<*>) :: Dual (a -> b) -> Dual a -> Dual b Исходный код liftA2 :: (a -> b -> c) -> Dual a -> Dual b -> Dual c Исходный код (*>) :: Dual a -> Dual b -> Dual b Исходный код (<*) :: Dual a -> Dual b -> Dual a Исходный код | |
| Applicative Product Исходный код | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.Data.Semigroup.Internal Методыpure :: a -> Product a Исходный код (<*>) :: Product (a -> b) -> Product a -> Product b Исходный код liftA2 :: (a -> b -> c) -> Product a -> Product b -> Product c Исходный код (*>) :: Product a -> Product b -> Product b Исходный код (<*) :: Product a -> Product b -> Product a Исходный код | |
| Applicative Sum Исходный код | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.Data.Semigroup.Internal Методыpure :: a -> Sum a Исходный код (<*>) :: Sum (a -> b) -> Sum a -> Sum b Исходный код liftA2 :: (a -> b -> c) -> Sum a -> Sum b -> Sum c Исходный код (*>) :: Sum a -> Sum b -> Sum b Исходный код (<*) :: Sum a -> Sum b -> Sum 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 |
Определено в GHC.Internal.Functor.ZipList Методы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 NoIO Исходный код | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.GHCi Методыpure :: a -> NoIO a Исходный код (<*>) :: NoIO (a -> b) -> NoIO a -> NoIO b Исходный код liftA2 :: (a -> b -> c) -> NoIO a -> NoIO b -> NoIO c Исходный код (*>) :: NoIO a -> NoIO b -> NoIO b Исходный код (<*) :: NoIO a -> NoIO b -> NoIO a Исходный код | |
| Applicative Par1 Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.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 Q Исходный код | |
Определено в GHC.Internal.TH.Syntax Методыpure :: a -> Q a Исходный код (<*>) :: Q (a -> b) -> Q a -> Q b Исходный код liftA2 :: (a -> b -> c) -> Q a -> Q b -> Q c Исходный код (*>) :: Q a -> Q b -> Q b Исходный код (<*) :: Q a -> Q b -> Q a Исходный код | |
| Applicative P Исходный код | Начиная с: base-4.5.0.0 |
Определено в GHC.Internal.Text.ParserCombinators.ReadP Методыpure :: a -> P a Исходный код (<*>) :: P (a -> b) -> P a -> P b Исходный код liftA2 :: (a -> b -> c) -> P a -> P b -> P c Исходный код (*>) :: P a -> P b -> P b Исходный код (<*) :: P a -> P b -> P a Исходный код | |
| Applicative ReadP Исходный код | Начиная с: base-4.6.0.0 |
Определено в GHC.Internal.Text.ParserCombinators.ReadP Методыpure :: a -> ReadP a Исходный код (<*>) :: ReadP (a -> b) -> ReadP a -> ReadP b Исходный код liftA2 :: (a -> b -> c) -> ReadP a -> ReadP b -> ReadP c Исходный код (*>) :: ReadP a -> ReadP b -> ReadP b Исходный код (<*) :: ReadP a -> ReadP b -> ReadP a Исходный код | |
| Applicative ReadPrec Исходный код | Начиная с: base-4.6.0.0 |
Определено в GHC.Internal.Text.ParserCombinators.ReadPrec Методыpure :: a -> ReadPrec a Исходный код (<*>) :: ReadPrec (a -> b) -> ReadPrec a -> ReadPrec b Исходный код liftA2 :: (a -> b -> c) -> ReadPrec a -> ReadPrec b -> ReadPrec c Исходный код (*>) :: ReadPrec a -> ReadPrec b -> ReadPrec b Исходный код (<*) :: ReadPrec a -> ReadPrec b -> ReadPrec a Исходный код | |
| Applicative IO Исходный код | Начиная с: base-2.1 |
Определено в GHC.Internal.Data.Proxy Методыpure :: a -> Proxy a Исходный код (<*>) :: Proxy (a -> b) -> Proxy a -> Proxy b Исходный код liftA2 :: (a -> b -> c) -> Proxy a -> Proxy b -> Proxy c Исходный код (*>) :: Proxy a -> Proxy b -> Proxy b Исходный код (<*) :: Proxy a -> Proxy b -> Proxy a Исходный код | |
| Applicative (U1 :: Type -> Type) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.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 Исходный код | |
| Applicative (ST s) Исходный код | Начиная с: base-4.4.0.0 |
Определено в GHC.Internal.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 Исходный код | |
| Monoid a => Applicative ((,) a) Исходный код |
Для кортежей ограничение ("hello ", (+15)) <*> ("world!", 2002)
("hello world!",2017)
Начиная с: base-2.1 |
Определено в GHC.Internal.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) Исходный код | |
| 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 m => Applicative (Kleisli m a) Исходный код | Начиная с: base-4.14.0.0 |
Определено в GHC.Internal.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 Исходный код | |
| Monoid m => Applicative (Const m :: Type -> Type) Исходный код | Начиная с: base-2.0.1 |
Определено в GHC.Internal.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 Исходный код | |
| Monad m => Applicative (StateT s m) Исходный код | Начиная с: base-4.18.0.0 |
Определено в GHC.Internal.Data.Functor.Utils Методыpure :: a -> StateT s m a Исходный код (<*>) :: StateT s m (a -> b) -> StateT s m a -> StateT s m b Исходный код liftA2 :: (a -> b -> c) -> StateT s m a -> StateT s m b -> StateT s m c Исходный код (*>) :: StateT s m a -> StateT s m b -> StateT s m b Исходный код (<*) :: StateT s m a -> StateT s m b -> StateT s m a Исходный код | |
| Applicative f => Applicative (Ap f) Исходный код | Начиная с: base-4.12.0.0 |
Определено в GHC.Internal.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 Исходный код | |
| Applicative f => Applicative (Alt f) Исходный код | Начиная с: base-4.8.0.0 |
Определено в GHC.Internal.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 Исходный код | |
| (Generic1 f, Applicative (Rep1 f)) => Applicative (Generically1 f) Исходный код | Начиная с: base-4.17.0.0 |
Определён в GHC.Internal.Generics Методыpure :: a -> Generically1 f a Исходный код (<*>) :: Generically1 f (a -> b) -> Generically1 f a -> Generically1 f b Исходный код liftA2 :: (a -> b -> c) -> Generically1 f a -> Generically1 f b -> Generically1 f c Исходный код (*>) :: Generically1 f a -> Generically1 f b -> Generically1 f b Исходный код (<*) :: Generically1 f a -> Generically1 f b -> Generically1 f a Исходный код | |
| Applicative f => Applicative (Rec1 f) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.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.Internal.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 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 g) => Applicative (f :*: g) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.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 Исходный код | |
| Monoid c => Applicative (K1 i c :: Type -> Type) Исходный код | Начиная с: base-4.12.0.0 |
Определён в GHC.Internal.Generics Методыpure :: a -> K1 i c a Исходный код (<*>) :: K1 i c (a -> b) -> K1 i c a -> K1 i c b Исходный код liftA2 :: (a -> b -> c0) -> K1 i c a -> K1 i c b -> K1 i c c0 Исходный код (*>) :: K1 i c a -> K1 i c b -> K1 i c b Исходный код (<*) :: K1 i c a -> K1 i c b -> K1 i c a Исходный код | |
| (Monoid a, Monoid b, Monoid c) => Applicative ((,,,) a b c) Исходный код | Начиная с: base-4.14.0.0 |
Определён в GHC.Internal.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 ((->) r) Исходный код | Начиная с: base-2.1 |
Определён в GHC.Internal.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 Исходный код | |
| (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 Исходный код | |
| (Applicative f, Applicative g) => Applicative (f :.: g) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.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 (M1 i c f) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.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 Исходный код | |
Альтернативы
class Applicative f => Alternative (f :: Type -> Type) where Исходный код
Моноид на аппликативных функторах.
Если они определены, some и many должны быть наименьшими решениями уравнений:
Примеры
>>> Nothing <|> Just 42 Just 42
>>> [1, 2] <|> [3, 4] [1,2,3,4]
>>> empty <|> print (2^15) 32768
Методы
Нейтральный элемент для <|>
empty <|> a == a a <|> empty == a
(<|>) :: f a -> f a -> f a infixl 3 Source
Ассоциативная бинарная операция
Один или несколько.
Примеры
>>> some (putStr "la") lalalalalalalalala... * goes on forever *
>>> some Nothing nothing
>>> take 5 <$> some (Just 1) * hangs forever *
Обратите внимание, что эту функцию можно использовать с парсерами на основе Applicative. В этом случае some parser будет пытаться разбирать parser один или несколько раз, пока не завершится неудачей.
Ноль или более.
Примеры
>>> many (putStr "la") lalalalalalalalala... * goes on forever *
>>> many Nothing Just []
>>> take 5 <$> many (Just 1) * hangs forever *
Обратите внимание, что эту функцию можно использовать с парсерами на основе Applicative. В этом случае many parser будет пытаться разбирать parser ноль или более раз, пока не завершится неудачей.
Экземпляры
| Alternative STM Источник |
Выбирает первое действие, не завершающееся С версии: base-4.8.0.0 |
| Alternative ZipList Источник | С версии: base-4.11.0.0 |
| Alternative P Источник | С версии: base-4.5.0.0 |
| Alternative ReadP Источник | С версии: base-4.6.0.0 |
| Alternative ReadPrec Источник | С версии: base-4.6.0.0 |
| Alternative IO Источник |
Возвращает результат первого действия С версии: base-4.9.0.0 |
| Alternative Maybe Источник |
Выбирает самое левое значение С версии: base-2.1 |
| Alternative [] Источник |
Объединяет списки конкатенацией, начиная с пустого списка. С версии: base-2.1 |
| MonadPlus m => Alternative (WrappedMonad m) Источник | С версии: base-2.1 |
Определён в Control.Applicative Методыempty :: WrappedMonad m a Источник (<|>) :: WrappedMonad m a -> WrappedMonad m a -> WrappedMonad m a Источник some :: WrappedMonad m a -> WrappedMonad m [a] Источник many :: WrappedMonad m a -> WrappedMonad m [a] Источник | |
| ArrowPlus a => Alternative (ArrowMonad a) Источник | С версии: base-4.6.0.0 |
Определён в GHC.Internal.Control.Arrow Методыempty :: ArrowMonad a a0 Источник (<|>) :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Источник some :: ArrowMonad a a0 -> ArrowMonad a [a0] Источник many :: ArrowMonad a a0 -> ArrowMonad a [a0] Источник | |
| Alternative (Proxy :: Type -> Type) Источник | С версии: base-4.9.0.0 |
| Alternative (U1 :: Type -> Type) Источник | С версии: base-4.9.0.0 |
| (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) Источник | С версии: base-2.1 |
Определён в Control.Applicative Методыempty :: WrappedArrow a b a0 Источник (<|>) :: WrappedArrow a b a0 -> WrappedArrow a b a0 -> WrappedArrow a b a0 Источник some :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Источник many :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Источник | |
| Alternative m => Alternative (Kleisli m a) Источник | С версии: base-4.14.0.0 |
Экземпляры
newtype Const a (b :: k) Исходный код
Функтор Const.
Примеры
>>> fmap (++ "World") (Const "Hello") Const "Hello"
Поскольку мы игнорируем второй параметр типа Const, экземпляр Applicative, в котором используется (<*>) :: Monoid m => Const m (a -> b) -> Const m a -> Const m b, по сути превращается в Monoid m => m -> m -> m, то есть в (<>)
>>> Const [1, 2, 3] <*> Const [4, 5, 6] Const [1,2,3,4,5,6]
Экземпляры
Определён в GHC.Internal.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 Исходный код | |
| Functor (Const m :: Type -> Type) Исходный код | Начиная с: base-2.1 |
Определён в GHC.Internal.Data.Functor.Const Методыfmap :: (a -> b) -> Const m a -> Const m b Исходный код (<$) :: a -> Const m b -> Const m a Исходный код | |
| Foldable (Const m :: Type -> Type) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.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 :: Type -> Type) Исходный код | Начиная с: base-4.7.0.0 |
Определён в GHC.Internal.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) Исходный код | |
| Monoid a => Monoid (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Const Методыmempty :: Const a b Исходный код mappend :: Const a b -> Const a b -> Const a b Исходный код mconcat :: [Const a b] -> Const a b Исходный код | |
| Semigroup a => Semigroup (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Const Методы(<>) :: Const a b -> Const a b -> Const a b Исходный код sconcat :: NonEmpty (Const a b) -> Const a b Исходный код stimes :: Integral b0 => b0 -> Const a b -> Const a b Исходный код | |
| Bits a => Bits (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Const Методы(.&.) :: Const a b -> Const a b -> Const a b Исходный код (.|.) :: Const a b -> Const a b -> Const a b Исходный код xor :: Const a b -> Const a b -> Const a b Исходный код complement :: Const a b -> Const a b Исходный код shift :: Const a b -> Int -> Const a b Исходный код rotate :: Const a b -> Int -> Const a b Исходный код zeroBits :: Const a b Исходный код bit :: Int -> Const a b Исходный код setBit :: Const a b -> Int -> Const a b Исходный код clearBit :: Const a b -> Int -> Const a b Исходный код complementBit :: Const a b -> Int -> Const a b Исходный код testBit :: Const a b -> Int -> Bool Исходный код bitSizeMaybe :: Const a b -> Maybe Int Исходный код bitSize :: Const a b -> Int Исходный код isSigned :: Const a b -> Bool Исходный код shiftL :: Const a b -> Int -> Const a b Исходный код unsafeShiftL :: Const a b -> Int -> Const a b Исходный код shiftR :: Const a b -> Int -> Const a b Исходный код unsafeShiftR :: Const a b -> Int -> Const a b Исходный код rotateL :: Const a b -> Int -> Const a b Исходный код rotateR :: Const a b -> Int -> Const a b Исходный код popCount :: Const a b -> Int Исходный код | |
| FiniteBits a => FiniteBits (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определён в GHC.Internal.Data.Functor.Const МетодыfiniteBitSize :: Const a b -> Int Исходный код countLeadingZeros :: Const a b -> Int Исходный код countTrailingZeros :: Const a b -> Int Исходный код | |
| Eq a => Eq (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const Методы(==) :: Const a b -> Const a b -> Bool Исходный код (/=) :: Const a b -> Const a b -> Bool Исходный код | |
| Ord a => Ord (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const Методыcompare :: Const a b -> Const a b -> Ordering Исходный код (<) :: Const a b -> Const a b -> Bool Исходный код (<=) :: Const a b -> Const a b -> Bool Исходный код (>) :: Const a b -> Const a b -> Bool Исходный код (>=) :: Const a b -> Const a b -> Bool Исходный код max :: Const a b -> Const a b -> Const a b Исходный код min :: Const a b -> Const a b -> Const a b Исходный код | |
| (Typeable k, Data a, Typeable b) => Data (Const a b) Исходный код | Начиная с: base-4.10.0.0 |
Определено в GHC.Internal.Data.Data Методыgfoldl :: (forall d b0. Data d => c (d -> b0) -> d -> c b0) -> (forall g. g -> c g) -> Const a b -> c (Const a b) Исходный код gunfold :: (forall b0 r. Data b0 => c (b0 -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Const a b) Исходный код toConstr :: Const a b -> Constr Исходный код dataTypeOf :: Const a b -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Const a b)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Const a b)) Исходный код gmapT :: (forall b0. Data b0 => b0 -> b0) -> Const a b -> Const a b Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Const a b -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> Const a b -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> Const a b -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Const a b -> m (Const a b) Исходный код | |
| IsString a => IsString (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.String МетодыfromString :: String -> Const a b Исходный код | |
| Bounded a => Bounded (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const | |
| Enum a => Enum (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const Методыsucc :: Const a b -> Const a b Исходный код pred :: Const a b -> Const a b Исходный код toEnum :: Int -> Const a b Исходный код fromEnum :: Const a b -> Int Исходный код enumFrom :: Const a b -> [Const a b] Исходный код enumFromThen :: Const a b -> Const a b -> [Const a b] Исходный код enumFromTo :: Const a b -> Const a b -> [Const a b] Исходный код enumFromThenTo :: Const a b -> Const a b -> Const a b -> [Const a b] Исходный код | |
| Floating a => Floating (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const Методыpi :: Const a b Исходный код exp :: Const a b -> Const a b Исходный код log :: Const a b -> Const a b Исходный код sqrt :: Const a b -> Const a b Исходный код (**) :: Const a b -> Const a b -> Const a b Исходный код logBase :: Const a b -> Const a b -> Const a b Исходный код sin :: Const a b -> Const a b Исходный код cos :: Const a b -> Const a b Исходный код tan :: Const a b -> Const a b Исходный код asin :: Const a b -> Const a b Исходный код acos :: Const a b -> Const a b Исходный код atan :: Const a b -> Const a b Исходный код sinh :: Const a b -> Const a b Исходный код cosh :: Const a b -> Const a b Исходный код tanh :: Const a b -> Const a b Исходный код asinh :: Const a b -> Const a b Исходный код acosh :: Const a b -> Const a b Исходный код atanh :: Const a b -> Const a b Исходный код log1p :: Const a b -> Const a b Исходный код expm1 :: Const a b -> Const a b Исходный код log1pexp :: Const a b -> Const a b Исходный код log1mexp :: Const a b -> Const a b Исходный код | |
| RealFloat a => RealFloat (Const a b) Исходный код | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const МетодыfloatRadix :: Const a b -> Integer Источник floatDigits :: Const a b -> Int Источник floatRange :: Const a b -> (Int, Int) Источник decodeFloat :: Const a b -> (Integer, Int) Источник encodeFloat :: Integer -> Int -> Const a b Источник exponent :: Const a b -> Int Источник significand :: Const a b -> Const a b Источник scaleFloat :: Int -> Const a b -> Const a b Источник isNaN :: Const a b -> Bool Источник isInfinite :: Const a b -> Bool Источник isDenormalized :: Const a b -> Bool Источник isNegativeZero :: Const a b -> Bool Источник | |||||
| Storable a => Storable (Const a b) Источник | С версии: base-4.9.0.0 |
||||
Определено в GHC.Internal.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 () Источник | |||||
| Generic (Const a b) Источник | |||||
Определено в GHC.Internal.Data.Functor.Const Связанные типы
| |||||
| Ix a => Ix (Const a b) Источник | С версии: base-4.9.0.0 |
||||
Определено в GHC.Internal.Data.Functor.Const Методыrange :: (Const a b, Const a b) -> [Const a b] Источник index :: (Const a b, Const a b) -> Const a b -> Int Источник unsafeIndex :: (Const a b, Const a b) -> Const a b -> Int Источник inRange :: (Const a b, Const a b) -> Const a b -> Bool Источник rangeSize :: (Const a b, Const a b) -> Int Источник unsafeRangeSize :: (Const a b, Const a b) -> Int Источник | |||||
| Num a => Num (Const a b) Источник | С версии: base-4.9.0.0 |
||||
Определено в GHC.Internal.Data.Functor.Const Методы(+) :: Const a b -> Const a b -> Const a b Источник (-) :: Const a b -> Const a b -> Const a b Источник (*) :: Const a b -> Const a b -> Const a b Источник negate :: Const a b -> Const a b Источник abs :: Const a b -> Const a b Источник signum :: Const a b -> Const a b Источник fromInteger :: Integer -> Const a b Источник | |||||
| Read a => Read (Const a b) Источник |
Этот экземпляр был бы эквивалентен выведенным экземплярам нового типа С версии: base-4.8.0.0 |
||||
| Fractional a => Fractional (Const a b) Источник | С версии: base-4.9.0.0 |
||||
| Integral a => Integral (Const a b) Источник | С версии: base-4.9.0.0 |
||||
Определено в GHC.Internal.Data.Functor.Const Методыquot :: Const a b -> Const a b -> Const a b Источник rem :: Const a b -> Const a b -> Const a b Источник div :: Const a b -> Const a b -> Const a b Источник mod :: Const a b -> Const a b -> Const a b Источник quotRem :: Const a b -> Const a b -> (Const a b, Const a b) Источник divMod :: Const a b -> Const a b -> (Const a b, Const a b) Источник | |||||
| Real a => Real (Const a b) Источник | С версии: base-4.9.0.0 |
||||
Определено в GHC.Internal.Data.Functor.Const МетодыtoRational :: Const a b -> Rational Источник | |||||
| RealFrac a => RealFrac (Const a b) Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const | |
| Show a => Show (Const a b) Источник |
Этот экземпляр был бы эквивалентен производным экземплярам нового типа Начиная с: base-4.8.0.0 |
| type Rep1 (Const a :: k -> Type) Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const | |
| type Rep (Const a b) Источник | Начиная с: base-4.9.0.0 |
Определено в GHC.Internal.Data.Functor.Const | |
newtype WrappedMonad (m :: Type -> Type) a Источник
Конструкторы
| WrapMonad | |
Поля
| |
Экземпляры
| Generic1 (WrappedMonad m :: Type -> Type) Исходный код | |||||
Определено в Control.Applicative Связанные типы
Методыfrom1 :: WrappedMonad m a -> Rep1 (WrappedMonad m) a Исходный код to1 :: Rep1 (WrappedMonad m) a -> WrappedMonad m a Исходный код | |||||
| MonadPlus m => Alternative (WrappedMonad m) Исходный код | Начиная с: base-2.1 |
||||
Определено в Control.Applicative Методыempty :: WrappedMonad m a Исходный код (<|>) :: WrappedMonad m a -> WrappedMonad m a -> WrappedMonad m a Исходный код some :: WrappedMonad m a -> WrappedMonad m [a] Исходный код many :: WrappedMonad m a -> WrappedMonad m [a] Исходный код | |||||
| Monad m => Applicative (WrappedMonad m) Исходный код | Начиная с: base-2.1 |
||||
Определено в Control.Applicative Методыpure :: a -> WrappedMonad m a Исходный код (<*>) :: WrappedMonad m (a -> b) -> WrappedMonad m a -> WrappedMonad m b Исходный код liftA2 :: (a -> b -> c) -> WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m c Исходный код (*>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Исходный код (<*) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m a Исходный код | |||||
| Monad m => Functor (WrappedMonad m) Исходный код | Начиная с: base-2.1 |
||||
Определено в Control.Applicative Методыfmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Исходный код (<$) :: a -> WrappedMonad m b -> WrappedMonad m a Исходный код | |||||
| Monad m => Monad (WrappedMonad m) Исходный код | Начиная с: base-4.7.0.0 |
||||
Определено в Control.Applicative Методы(>>=) :: WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Исходный код (>>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Исходный код return :: a -> WrappedMonad m a Исходный код | |||||
| (Typeable m, Typeable a, Data (m a)) => Data (WrappedMonad m a) Исходный код | Начиная с: base-4.14.0.0 |
||||
Определено в Control.Applicative Методы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) Исходный код | |||||
Определено в Control.Applicative Связанные типы
Методыfrom :: WrappedMonad m a -> Rep (WrappedMonad m a) x Исходный код to :: Rep (WrappedMonad m a) x -> WrappedMonad m a Исходный код | |||||
| type Rep1 (WrappedMonad m :: Type -> Type) Исходный код | Начиная с: base-4.7.0.0 |
||||
Определено в Control.Applicative type Rep1 (WrappedMonad m :: Type -> Type) = D1 ('MetaData "WrappedMonad" "Control.Applicative" "base-4.22.0.0-66f8" 'True) (C1 ('MetaCons "WrapMonad" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonad") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 m))) | |||||
| type Rep (WrappedMonad m a) Исходный код | Начиная с: base-4.7.0.0 |
||||
Определено в Control.Applicative type Rep (WrappedMonad m a) = D1 ('MetaData "WrappedMonad" "Control.Applicative" "base-4.22.0.0-66f8" 'True) (C1 ('MetaCons "WrapMonad" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapMonad") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (m a)))) | |||||
newtype WrappedArrow (a :: Type -> Type -> Type) b c Исходный код
Конструкторы
| WrapArrow | |
Поля
| |
Экземпляры
| Generic1 (WrappedArrow a b :: Type -> Type) Источник | |||||
Определено в Control.Applicative Связанные типы
Методыfrom1 :: WrappedArrow a b a0 -> Rep1 (WrappedArrow a b) a0 Источник to1 :: Rep1 (WrappedArrow a b) a0 -> WrappedArrow a b a0 Источник | |||||
| (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) Источник | Начиная с: base-2.1 |
||||
Определено в Control.Applicative Методыempty :: WrappedArrow a b a0 Источник (<|>) :: WrappedArrow a b a0 -> WrappedArrow a b a0 -> WrappedArrow a b a0 Источник some :: WrappedArrow a b a0 -> WrappedArrow a b [a0] Источник many :: WrappedArrow a b a0 -> WrappedArrow a b [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 Источник | |||||
| Arrow a => Functor (WrappedArrow a b) Источник | Начиная с: base-2.1 |
||||
Определено в Control.Applicative Методыfmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Источник (<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Источник | |||||
| (Typeable a, Typeable b, Typeable c, Data (a b c)) => Data (WrappedArrow a b c) Источник | Начиная с: base-4.14.0.0 |
||||
Определено в Control.Applicative Методы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) Источник | |||||
Определено в Control.Applicative Связанные типы
Методы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) Источник | Начиная с: base-4.7.0.0 |
||||
Определено в Control.Applicative type Rep1 (WrappedArrow a b :: Type -> Type) = D1 ('MetaData "WrappedArrow" "Control.Applicative" "base-4.22.0.0-66f8" 'True) (C1 ('MetaCons "WrapArrow" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapArrow") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 (a b)))) | |||||
| type Rep (WrappedArrow a b c) Источник | Начиная с: base-4.7.0.0 |
||||
Определено в Control.Applicative type Rep (WrappedArrow a b c) = D1 ('MetaData "WrappedArrow" "Control.Applicative" "base-4.22.0.0-66f8" 'True) (C1 ('MetaCons "WrapArrow" 'PrefixI 'True) (S1 ('MetaSel ('Just "unwrapArrow") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (a b c)))) | |||||
Списки, но с функтором Applicative, основанным на попарном объединении.
Примеры
В отличие от Applicative для List:
>>> (+) <$> [1, 2, 3] <*> [4, 5, 6] [5,6,7,6,7,8,7,8,9]
Экземпляр Applicative для ZipList применяет операцию, попарно объединяя элементы, аналогично zipWithN
>>> (+) <$> ZipList [1, 2, 3] <*> ZipList [4, 5, 6]
ZipList {getZipList = [5,7,9]}
>>> (,,,) <$> ZipList [1, 2] <*> ZipList [3, 4] <*> ZipList [5, 6] <*> ZipList [7, 8]
ZipList {getZipList = [(1,3,5,7),(2,4,6,8)]}
>>> ZipList [(+1), (^2), (/ 2)] <*> ZipList [5, 5, 5]
ZipList {getZipList = [6.0,25.0,2.5]}
Конструкторы
| ZipList | |
Поля
| |
Экземпляры
| Alternative ZipList Источник | Начиная с: base-4.11.0.0 |
||||
| 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 |
||||
Определено в GHC.Internal.Functor.ZipList | |||||
| Functor ZipList Источник | Начиная с: base-2.1 |
||||
| Foldable ZipList Источник | Начиная с: base-4.9.0.0 |
||||
Определено в GHC.Internal.Functor.ZipList Методы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 |
||||
Определено в GHC.Internal.Functor.ZipList | |||||
| Generic1 ZipList Источник | |||||
Определено в GHC.Internal.Functor.ZipList Связанные типы
| |||||
| Eq a => Eq (ZipList a) Источник | Начиная с: base-4.7.0.0 |
||||
| Ord a => Ord (ZipList a) Источник | Начиная с: base-4.7.0.0 |
||||
Определено в GHC.Internal.Functor.ZipList Методыcompare :: ZipList a -> ZipList a -> Ordering Источник (<) :: ZipList a -> ZipList a -> Bool Источник (<=) :: ZipList a -> ZipList a -> Bool Источник (>) :: ZipList a -> ZipList a -> Bool Источник (>=) :: ZipList a -> ZipList a -> Bool Источник | |||||
| Data a => Data (ZipList a) Источник | Начиная с: base-4.14.0.0 |
||||
Определено в GHC.Internal.Functor.ZipList Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ZipList a -> c (ZipList a) Источник gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ZipList a) Источник toConstr :: ZipList a -> Constr Источник dataTypeOf :: ZipList a -> DataType Источник dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ZipList a)) Источник dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ZipList a)) Источник gmapT :: (forall b. Data b => b -> b) -> ZipList a -> ZipList a Источник gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r Источник gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ZipList a -> r Источник gmapQ :: (forall d. Data d => d -> u) -> ZipList a -> [u] Источник gmapQi :: Int -> (forall d. Data d => d -> u) -> ZipList a -> u Источник gmapM :: Monad m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Источник gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Источник gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ZipList a -> m (ZipList a) Источник | |||||
| Generic (ZipList a) Источник | |||||
Определено в GHC.Internal.Functor.ZipList Ассоциированные типы
| |||||
| IsList (ZipList a) Источник | Начиная с: base-4.15.0.0 |
||||
Определено в GHC.Internal.IsList Ассоциированные типы
| |||||
| Read a => Read (ZipList a) Источник | Начиная с: base-4.7.0.0 |
||||
| Show a => Show (ZipList a) Источник | Начиная с: base-4.7.0.0 |
||||
| type Rep1 ZipList Источник | Начиная с: base-4.7.0.0 |
||||
Определено в GHC.Internal.Functor.ZipList | |||||
| type Rep (ZipList a) Источник | Начиная с: base-4.7.0.0 |
||||
Определено в GHC.Internal.Functor.ZipList | |||||
| type Item (ZipList a) Источник | |||||
Определено в GHC.Internal.IsList | |||||
Вспомогательные функции
(<$>) :: Functor f => (a -> b) -> f a -> f b infixl 4 Источник
Инфиксный синоним для 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, но его можно переопределить более эффективной версией.
Примеры
Выполнить вычисление с Maybe и заменить результат константным значением, если он равен Just:
>>> 'a' <$ Just 2 Just 'a' >>> 'a' <$ Nothing Nothing
(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 Источник
Вариант <*> с аргументами в обратном порядке. Он отличается от flip (<*>) тем, что эффекты обрабатываются в порядке представления аргументов.
Примеры
>>> (<**>) (print 1) (id <$ print 2) 1 2
>>> flip (<*>) (print 1) (id <$ print 2) 2 1
>>> ZipList [4, 5, 6] <**> ZipList [(+1), (*2), (/3)]
ZipList {getZipList = [5.0,10.0,2.0]}
liftA :: Applicative f => (a -> b) -> f a -> f b Источник
Поднимает функцию до действий. Эквивалент метода fmap класса Functor, но реализован только с помощью методов Applicative: liftA f a = pure f <*> a
Поэтому эту функцию можно использовать для реализации экземпляра Functor на основе экземпляра Applicative.
Примеры
Используя экземпляр Applicative для списков:
>>> liftA (+1) [1, 2] [2,3]
Или экземпляр Applicative для Maybe
>>> liftA (+1) (Just 3) Just 4
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d Источник
Поднимает тернарную функцию до действий.
optional :: Alternative f => f a -> f (Maybe a) Источник
Один вариант или ни одного.
Полезно для моделирования любых вычислений, которые могут завершиться неудачей.
Примеры
Используя экземпляр Alternative из Control.Monad.Except, следующие функции:
>>> import Control.Monad.Except
>>> canFail = throwError "it failed" :: Except String Int >>> final = return 42 :: Except String Int
Можно объединить, разрешив первой функции завершиться неудачей:
>>> runExcept $ canFail *> final Left "it failed"
>>> runExcept $ optional canFail *> final Right 42
asum :: (Foldable t, Alternative f) => t (f a) -> f a Источник
Сумма коллекции действий с использованием (<|>), обобщающая concat.
asum аналогична msum, но обобщена для Alternative.
Примеры
Базовое использование:
>>> asum [Just "Hello", Nothing, Just "World"] Just "Hello"
© 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/Control-Applicative.html