GHC.Базовая
| Авторские права | (c) Университет Глазго 1992-2002 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | cvs-ghc@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая (расширения GHC) |
| Безопасный Haskell | Небезопасный |
| Язык | Haskell2010 |
Описание
Основные типы данных и классы.
augment :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a] -> [a] Источник
Производитель списков, который можно объединить с foldr. Эта функция просто
augment g xs = g (:) xs
но упроститель GHC преобразует выражение вида foldr k z (augment g xs), которое может возникнуть после встраивания, в g k (foldr k z xs), что избегает создания промежуточного списка.
(++) :: [a] -> [a] -> [a] infixr 5 Источник
Присоединяет два списка, т.е.
[x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn] [x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...]
Если первый список не конечен, результатом является первый список.
build :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a] Источник
Производитель списков, который можно объединить с foldr. Эта функция просто
build g = g (:) []
но упроститель GHC преобразует выражение вида foldr k z (build g), которое может возникнуть после встраивания, в g k z, что избегает создания промежуточного списка.
foldr :: (a -> b -> b) -> b -> [a] -> b Источник
foldr, применённая к бинарному оператору, начальному значению (обычно право-нейтральному элементу оператора) и списку, сворачивает список с использованием бинарного оператора справа налево:
foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)
eqString :: String -> String -> Bool Источник
Этот String предикат равенства используется при разборе соответствий шаблонам со строками.
bindIO :: IO a -> (a -> IO b) -> IO b Источник
returnIO :: a -> IO a Источник
otherwise определяется как значение True. Это помогает сделать условия более читаемыми. Например:
f x | x < 0 = ...
| otherwise = ...
assert :: Bool -> a -> a Источник
Если первое аргумент оценивается как True, то результатом является второй аргумент. В противном случае генерируется исключение AssertionFailed, содержащее String, включая имя файла и номер строки вызова assert.
Утверждения обычно можно включить или выключить с помощью флага компилятора (для GHC утверждения обычно включены, если оптимизация не включена с -O или флаг -fignore-asserts указан). При выключенных утверждениях первый аргумент assert игнорируется, и в качестве результата возвращается второй аргумент.
thenIO :: IO a -> IO b -> IO b Источник
breakpoint :: a -> a Источник
breakpointCond :: Bool -> a -> a Источник
map :: (a -> b) -> [a] -> [b] Источник
\(\mathcal{O}(n)\). map f xs — это список, полученный путём применения f к каждому элементу xs, т.е.
map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn] map f [x1, x2, ...] == [f x1, f x2, ...]
>>> map (+1) [1, 2, 3]
($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0 Источник
Оператор применения. Этот оператор избыточен, поскольку обычное применение (f x) означает то же, что и (f $ x). Однако $ имеет низкий приоритет связывания и правоассоциативность, поэтому иногда позволяет опустить скобки; например:
f $ g $ h x = f (g (h x))
Он также полезен в высших порядка ситуациях, таких как map ($ 0) xs, или zipWith ($) fs xs.
Обратите внимание, что ($) является полиморфным по лености в своём типе результата, так что foo $ True, где foo :: Bool -> Int# хорошо типизируется.
join :: Monad m => m (m a) -> m a Источник
Функция join является стандартным оператором объединения монады. Он используется для удаления одного уровня монадной структуры, проектируя связанный аргумент на внешний уровень.
'join bss' можно понять как do выражение
do bs <- bss bs
Примеры
Распространённое использование join — это выполнение вычисления IO, возвращаемого из STM транзакции, поскольку STM транзакции не могут выполнять IO непосредственно. Вспомните, что
atomically :: STM a -> IO a
используется для выполнения STM транзакций атомарно. Таким образом, специализируя типы atomically и join на
atomically :: STM (IO b) -> IO (IO b) join :: IO (IO b) -> IO b
мы можем их комбинировать как
join . atomically :: STM (IO b) -> IO b
для выполнения STM транзакции и IO действия, которое она возвращает.
class Applicative m => Monad m where Источник
Класс Monad определяет основные операции над монадой, концепцией из области математики, известной как теория категорий. Однако с точки зрения программиста на Haskell лучше представлять монаду как абстрактный тип данных действий. do выражения Haskell предоставляют удобный синтаксис для записи монадических выражений.
Примеры Monad должны удовлетворять следующим:
- Левая идентичность
return a >>= k = k a- Правая идентичность
m >>= return = m- Ассоциативность
m >>= (\x -> k x >>= h) = (m >>= k) >>= h
Кроме того, операции Monad и Applicative должны быть связаны следующим образом:
Вышеуказанные законы подразумевают:
и что pure и (<*>) удовлетворяют законам аппликативного функтора.
Примеры Monad для списков, Maybe и IO определённые в Prelude, удовлетворяют этим законам.
Минимальное полное определение
Методы
(>>=) :: forall a b. m a -> (a -> m b) -> m b infixl 1 Источник
Последовательно выполняет два действия, передавая любое значение, полученное первым, в качестве аргумента второму.
'as >>= bs' можно понять как do выражение
do a <- as bs a
(>>) :: forall a b. m a -> m b -> m b infixl 1 Источник
Последовательно выполняет два действия, отбрасывая любое значение, полученное первым, как операторы следования (такие как точка с запятой) в императивных языках.
'as >> bs' можно понять как do выражение
do as bs
Вставляет значение в монадный тип.
Экземпляры
| Monad [] | С версии: base-2.1 |
Определено в GHC.Base Методы(>>=) :: [a] -> (a -> [b]) -> [b] Исходный код (>>) :: [a] -> [b] -> [b] Исходный код return :: a -> [a] Исходный код | |
| Monad Maybe | С версии: base-2.1 |
Определено в GHC.Base Методы(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b Исходный код (>>) :: Maybe a -> Maybe b -> Maybe b Исходный код return :: a -> Maybe a Исходный код | |
| Monad IO | С версии: base-2.1 |
Определено в GHC.Base Методы(>>=) :: IO a -> (a -> IO b) -> IO b Исходный код (>>) :: IO a -> IO b -> IO b Исходный код return :: a -> IO a Исходный код | |
| Monad Par1 | С версии: base-4.9.0.0 |
Определено в GHC.Generics Методы(>>=) :: Par1 a -> (a -> Par1 b) -> Par1 b Исходный код (>>) :: Par1 a -> Par1 b -> Par1 b Исходный код return :: a -> Par1 a Исходный код | |
| Monad NonEmpty | С версии: base-4.9.0.0 |
Определено в GHC.Base Методы(>>=) :: NonEmpty a -> (a -> NonEmpty b) -> NonEmpty b Исходный код (>>) :: NonEmpty a -> NonEmpty b -> NonEmpty b Исходный код return :: a -> NonEmpty a Исходный код | |
| Monad NoIO | С версии: base-4.4.0.0 |
Определено в GHC.GHCi Методы(>>=) :: NoIO a -> (a -> NoIO b) -> NoIO b Исходный код (>>) :: NoIO a -> NoIO b -> NoIO b Исходный код return :: a -> NoIO a Исходный код | |
| Monad ReadP | С версии: base-2.1 |
Определено в Text.ParserCombinators.ReadP Методы(>>=) :: ReadP a -> (a -> ReadP b) -> ReadP b Исходный код (>>) :: ReadP a -> ReadP b -> ReadP b Исходный код return :: a -> ReadP a Исходный код | |
| Monad ReadPrec | С версии: base-2.1 |
Определено в Data.Complex Методы(>>=) :: Complex a -> (a -> Complex b) -> Complex b Исходный код (>>) :: Complex a -> Complex b -> Complex b Исходный код return :: a -> Complex a Исходный код | |
| Monad (Either e) | С момента: base-4.4.0.0 |
Определено в Data.Either Методы(>>=) :: Either e a -> (a -> Either e b) -> Either e b Исходный код (>>) :: Either e a -> Either e b -> Either e b Исходный код return :: a -> Either e a Исходный код | |
| Monad (U1 :: Тип -> Тип) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методы(>>=) :: U1 a -> (a -> U1 b) -> U1 b Исходный код (>>) :: U1 a -> U1 b -> U1 b Исходный код return :: a -> U1 a Исходный код | |
| Моноид a => Monad ((,) a) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(>>=) :: (a, a0) -> (a0 -> (a, b)) -> (a, b) Исходный код (>>) :: (a, a0) -> (a, b) -> (a, b) Исходный код return :: a0 -> (a, a0) Исходный код | |
| Monad (ST s) | С момента: base-2.1 |
Определено в GHC.ST Методы(>>=) :: ST s a -> (a -> ST s b) -> ST s b Исходный код (>>) :: ST s a -> ST s b -> ST s b Исходный код return :: a -> ST s a Исходный код | |
| Monad (Proxy :: Тип -> Тип) | С момента: base-4.7.0.0 |
Определено в Data.Proxy Методы(>>=) :: Proxy a -> (a -> Proxy b) -> Proxy b Исходный код (>>) :: Proxy a -> Proxy b -> Proxy b Исходный код return :: a -> Proxy a Исходный код | |
| ArrowApply a => Monad (ArrowMonad a) | С момента: base-2.1 |
Определено в Control.Arrow Методы(>>=) :: ArrowMonad a a0 -> (a0 -> ArrowMonad a b) -> ArrowMonad a b Исходный код (>>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Исходный код return :: a0 -> ArrowMonad a a0 Исходный код | |
| 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 Исходный код | |
| Monad (ST s) | С момента: base-2.1 |
Определено в Control.Monad.ST.Lazy.Imp Методы(>>=) :: ST s a -> (a -> ST s b) -> ST s b Исходный код (>>) :: ST s a -> ST s b -> ST s b Исходный код return :: a -> ST s a Исходный код | |
| Monad f => Monad (Rec1 f) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методы(>>=) :: Rec1 f a -> (a -> Rec1 f b) -> Rec1 f b Исходный код (>>) :: Rec1 f a -> Rec1 f b -> Rec1 f b Исходный код return :: a -> Rec1 f a Исходный код | |
| (Monoid a, Monoid b) => Monad ((,,) a b) | С момента: base-4.14.0.0 |
Определено в GHC.Base Методы(>>=) :: (a, b, a0) -> (a0 -> (a, b, b0)) -> (a, b, b0) Исходный код (>>) :: (a, b, a0) -> (a, b, b0) -> (a, b, b0) Исходный код return :: a0 -> (a, b, a0) Исходный код | |
| Monad f => Monad (Alt f) | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методы(>>=) :: Alt f a -> (a -> Alt f b) -> Alt f b Исходный код (>>) :: Alt f a -> Alt f b -> Alt f b Исходный код return :: a -> Alt f a Исходный код | |
| Monad f => Monad (Ap f) | С момента: base-4.12.0.0 |
Определено в Data.Monoid Методы(>>=) :: Ap f a -> (a -> Ap f b) -> Ap f b Исходный код (>>) :: Ap f a -> Ap f b -> Ap f b Исходный код return :: a -> Ap f a Исходный код | |
| Monad m => Monad (Kleisli m a) | С момента: base-4.14.0.0 |
Определено в Control.Arrow Методы(>>=) :: Kleisli m a a0 -> (a0 -> Kleisli m a b) -> Kleisli m a b Исходный код (>>) :: Kleisli m a a0 -> Kleisli m a b -> Kleisli m a b Исходный код return :: a0 -> Kleisli m a a0 Исходный код | |
| Monad ((->) r :: Type -> Type) | С момента: base-2.1 |
Определено в GHC.Base Методы(>>=) :: (r -> a) -> (a -> r -> b) -> r -> b Исходный код (>>) :: (r -> a) -> (r -> b) -> r -> b Исходный код return :: a -> r -> a Исходный код | |
| (Monad f, Monad g) => Monad (f :*: g) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методы(>>=) :: (f :*: g) a -> (a -> (f :*: g) b) -> (f :*: g) b Исходный код (>>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b Исходный код return :: a -> (f :*: g) a Исходный код | |
| (Monoid a, Monoid b, Monoid c) => Monad ((,,,) a b c) | С момента: base-4.14.0.0 |
Определено в GHC.Base Методы(>>=) :: (a, b, c, a0) -> (a0 -> (a, b, c, b0)) -> (a, b, c, b0) Исходный код (>>) :: (a, b, c, a0) -> (a, b, c, b0) -> (a, b, c, b0) Исходный код return :: a0 -> (a, b, c, a0) Исходный код | |
| (Monad f, Monad g) => Monad (Product f g) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Product Методы(>>=) :: Product f g a -> (a -> Product f g b) -> Product f g b Исходный код (>>) :: Product f g a -> Product f g b -> Product f g b Исходный код return :: a -> Product f g a Исходный код | |
| Monad f => Monad (M1 i c f) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методы(>>=) :: M1 i c f a -> (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 b Исходный код return :: a -> M1 i c f a Исходный код | |
class Functor f where Исходный код
Тип f является Functor, если он предоставляет функцию fmap, которая, учитывая любые типы a и b, позволяет применять любую функцию из (a -> b) для преобразования f a в f b, сохраняя структуру f. Кроме того, f должен соответствовать следующим условиям:
Обратите внимание, что второе условие вытекает из свободной теоремы типа fmap и первого условия, поэтому вам нужно только проверить выполнение первого условия.
Минимальное полное определение
Методы
fmap :: (a -> b) -> f a -> f b Исходный код
Используя ApplicativeDo: 'fmap f as' можно интерпретировать как выражение do,
do a <- as pure (f a)
с выведенным ограничением Functor.
(<$) :: a -> f b -> f a infixl 4 Исходный код
Заменяет все места в вводе на одно и то же значение. По умолчанию определение равно fmap . const, но это можно переопределить более эффективной версией.
Используя ApplicativeDo: 'a <$ bs' можно интерпретировать как выражение do,
do bs pure a
с выведенным ограничением Functor.
Экземпляры
| Functor [] | С версии: base-2.1 |
| Functor Maybe | С версии: base-2.1 |
| Functor IO | С версии: base-2.1 |
| Functor Par1 | С версии: base-4.9.0.0 |
| Functor NonEmpty | С версии: base-4.9.0.0 |
| Functor NoIO | С версии: base-4.8.0.0 |
| Functor ReadP | С версии: base-2.1 |
| Functor ReadPrec | С версии: base-2.1 |
| Functor Down | С версии: base-4.11.0.0 |
| Functor Product | С версии: base-4.8.0.0 |
| Functor Сумма | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методыfmap :: (a -> b) -> Сумма a -> Сумма b Исходный код (<$) :: a -> Сумма b -> Сумма a Исходный код | |
| Functor Дуаль | С момента: base-4.8.0.0 |
Определено в Data.Semigroup.Internal Методыfmap :: (a -> b) -> Дуаль a -> Дуаль b Исходный код (<$) :: a -> Дуаль b -> Дуаль a Исходный код | |
| Functor Последний | С момента: base-4.8.0.0 |
Определено в Data.Monoid Методыfmap :: (a -> b) -> Последний a -> Последний b Исходный код (<$) :: a -> Последний b -> Последний a Исходный код | |
| Functor Первый | С момента: base-4.8.0.0 |
Определено в Data.Monoid Методыfmap :: (a -> b) -> Первый a -> Первый b Исходный код (<$) :: a -> Первый b -> Первый a Исходный код | |
| Functor STM | С момента: base-4.3.0.0 |
Определено в GHC.Conc.Sync | |
| Functor Обработчик | С момента: base-4.6.0.0 |
Определено в Control.Exception Методыfmap :: (a -> b) -> Обработчик a -> Обработчик b Исходный код (<$) :: a -> Обработчик b -> Обработчик a Исходный код | |
| Functor Тождество | С момента: base-4.8.0.0 |
Определено в Data.Functor.Identity Методыfmap :: (a -> b) -> Тождество a -> Тождество b Исходный код (<$) :: a -> Тождество b -> Тождество a Исходный код | |
| Functor ZipList | С момента: base-2.1 |
Определено в Control.Applicative Методыfmap :: (a -> b) -> ZipList a -> ZipList b Исходный код (<$) :: a -> ZipList b -> ZipList a Исходный код | |
| Functor ArgDescr | С момента: base-4.6.0.0 |
Определено в System.Console.GetOpt Методыfmap :: (a -> b) -> ArgDescr a -> ArgDescr b Исходный код (<$) :: a -> ArgDescr b -> ArgDescr a Исходный код | |
| Functor OptDescr | С момента: base-4.6.0.0 |
| Functor ArgOrder | С версии: base-4.6.0.0 |
| Functor Option | С версии: base-4.9.0.0 |
| Functor Last | С версии: base-4.9.0.0 |
| Functor First | С версии: base-4.9.0.0 |
| Functor Max | С версии: base-4.9.0.0 |
| Functor Min | С версии: base-4.9.0.0 |
| Functor Complex | С версии: base-4.9.0.0 |
| Functor (Either a) | С версии: base-3.0 |
| Functor (V1 :: Type -> Type) | С версии: base-4.9.0.0 |
Определено в GHC.Generics | |
| Functor (U1 :: Type -> Type) | С версии: base-4.9.0.0 |
Определено в GHC.Generics | |
| Functor ((,) a) | С версии: base-2.1 |
Определено в GHC.Base Методыfmap :: (a0 -> b) -> (a, a0) -> (a, b) Исходный код (<$) :: a0 -> (a, b) -> (a, a0) Исходный код | |
| Functor (ST s) | С версии: base-2.1 |
Определено в GHC.ST | |
| Functor (Array i) | С версии: base-2.1 |
Определено в GHC.Arr Методыfmap :: (a -> b) -> Array i a -> Array i b Исходный код (<$) :: a -> Array i b -> Array i a Исходный код | |
| Functor (Proxy :: Type -> Type) | С версии: base-4.7.0.0 |
Определено в Data.Proxy Методыfmap :: (a -> b) -> Proxy a -> Proxy b Исходный код (<$) :: a -> Proxy b -> Proxy a Исходный код | |
| Arrow a => Functor (ArrowMonad a) | С версии: base-4.6.0.0 |
Определено в Control.Arrow Методыfmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Исходный код (<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Исходный код | |
| 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 Исходный код | |
| Functor (ST s) | С версии: base-2.1 |
Определено в Control.Monad.ST.Lazy.Imp | |
| Functor (Arg a) | С версии: base-4.9.0.0 |
| Functor f => Functor (Rec1 f) | Since: base-4.9.0.0 |
| Functor (URec Char :: Type -> Type) | Since: base-4.9.0.0 |
| Functor (URec Double :: Type -> Type) | Since: base-4.9.0.0 |
| Functor (URec Float :: Type -> Type) | Since: base-4.9.0.0 |
| Functor (URec Int :: Type -> Type) | Since: base-4.9.0.0 |
| Functor (URec Word :: Type -> Type) | Since: base-4.9.0.0 |
| Functor (URec (Ptr ()) :: Type -> Type) | Since: base-4.9.0.0 |
| Functor ((,,) a b) | Since: base-4.14.0.0 |
| Functor f => Functor (Alt f) | Since: base-4.8.0.0 |
| Functor f => Functor (Ap f) | Since: base-4.12.0.0 |
| Functor (Const m :: Type -> Type) | Since: base-2.1 |
| Functor m => Functor (Kleisli m a) | Since: base-4.14.0.0 |
| Arrow a => Functor (WrappedArrow a b) | Since: base-2.1 |
Defined in Control.Applicative Методыfmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source (<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source | |
| Functor ((->) r :: Type -> Type) | Since: base-2.1 |
| Functor (K1 i c :: Type -> Type) | Since: base-4.9.0.0 |
| (Functor f, Functor g) => Functor (f :+: g) | Since: base-4.9.0.0 |
| (Functor f, Functor g) => Functor (f :*: g) | Since: base-4.9.0.0 |
Определено в GHC.Generics Методыfmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b Исходный код (<$) :: a -> (f :*: g) b -> (f :*: g) a Исходный код | |
| Functor ((,,,) a b c) | С момента: base-4.14.0.0 |
Определено в GHC.Base Методыfmap :: (a0 -> b0) -> (a, b, c, a0) -> (a, b, c, b0) Исходный код (<$) :: a0 -> (a, b, c, b0) -> (a, b, c, a0) Исходный код | |
| (Functor f, Functor g) => Functor (Sum f g) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Sum Методыfmap :: (a -> b) -> Sum f g a -> Sum f g b Исходный код (<$) :: a -> Sum f g b -> Sum f g a Исходный код | |
| (Functor f, Functor g) => Functor (Product f g) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Product Методыfmap :: (a -> b) -> Product f g a -> Product f g b Исходный код (<$) :: a -> Product f g b -> Product f g a Исходный код | |
| Functor f => Functor (M1 i c f) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методыfmap :: (a -> b) -> M1 i c f a -> M1 i c f b Исходный код (<$) :: a -> M1 i c f b -> M1 i c f a Исходный код | |
| (Functor f, Functor g) => Functor (f :.: g) | С момента: base-4.9.0.0 |
Определено в GHC.Generics Методыfmap :: (a -> b) -> (f :.: g) a -> (f :.: g) b Исходный код (<$) :: a -> (f :.: g) b -> (f :.: g) a Исходный код | |
| (Functor f, Functor g) => Functor (Compose f g) | С момента: base-4.9.0.0 |
Определено в Data.Functor.Compose Методыfmap :: (a -> b) -> Compose f g a -> Compose f g b Исходный код (<$) :: a -> Compose f g b -> Compose f g a Исходный код | |
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 Source
Последовательное применение.
Несколько функторов поддерживают реализацию <*>, которая более эффективна, чем стандартная.
Используя ApplicativeDo: 'fs <*> as' можно рассматривать как выражение do
do f <- fs a <- as pure (f a)
liftA2 :: (a -> b -> c) -> f a -> f b -> f c Source
Поднять бинарную функцию до действий.
Некоторые функторы поддерживают реализацию 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 Source
Последовательность действий, отбрасывая значение первого аргумента.
'as *> bs' можно рассматривать как выражение do
do as bs
Это немного сложно для нашего ApplicativeDo расширения, которое даст ему ограничение Monad. Для ограничения Applicative мы записываем его в форме
do _ <- as b <- bs pure b
(<*) :: f a -> f b -> f a infixl 4 Source
Последовательность действий, отбрасывая значение второго аргумента.
Используя ApplicativeDo: 'as <* bs' можно рассматривать как выражение do
do a <- as bs pure a
Вхождения
| Applicative [] | Since: base-2.1 |
| Applicative Maybe | Since: base-2.1 |
| Applicative IO | Since: base-2.1 |
| Applicative Par1 | Since: base-4.9.0.0 |
| Applicative NonEmpty | Since: base-4.9.0.0 |
Определено в GHC.Base | |
| Applicative NoIO | Since: base-4.8.0.0 |
| Applicative STM | Since: 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 | Since: 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"]}
Since: 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 | Since: 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 | Since: 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 Исходный код | |
| (Monoid a, Monoid b) => Applicative ((,,) a b) | С версии: base-4.14.0.0 |
Определено в GHC.Base | |
| Applicative f => Applicative (Alt f) | С версии: base-4.8.0.0 |
| Applicative f => Applicative (Ap f) | С версии: base-4.12.0.0 |
| Monoid m => Applicative (Const m :: Type -> Type) | С версии: base-2.0.1 |
Определено в Data.Functor.Const | |
| Applicative m => Applicative (Kleisli m a) | Since: 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) | Since: 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 :: Тип -> Тип) | Since: 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 :: Тип -> Тип) | Since: base-4.12.0.0 |
Определено в GHC.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 Исходный код | |
| (Applicative f, Applicative g) => Applicative (f :*: g) | Since: 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 Исходный код | |
| (Monoid a, Monoid b, Monoid 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 Semigroup a where Исходный код
Класс полугрупп (типов с ассоциативной бинарной операцией).
Экземпляры должны удовлетворять следующим условиям:
С версии: base-4.9.0.0
Минимальное полное определение
Методы
(<>) :: a -> a -> a infixr 6 Исходный код
Ассоциативная операция.
>>> [1,2,3] <> [4,5,6] [1,2,3,4,5,6]
sconcat :: NonEmpty a -> a Исходный код
Свести непустой список с помощью <>
По умолчанию достаточно, но может быть переопределено для повышения эффективности.
>>> import Data.List.NonEmpty >>> sconcat $ "Hello" :| [" ", "Haskell", "!"] "Hello Haskell!"
stimes :: Integral b => b -> a -> a Исходный код
Повторить значение n раз.
Поскольку это работает с Semigroup, разрешается ошибка при запросе 0 или меньше повторений, и стандартное определение так и поступит.
Делая это членом класса, идемпотентные полугруппы и моноиды могут улучшить это до выполнения за \(\mathcal{O}(1)\), выбирая stimes = stimesIdempotent или stimes =
stimesIdempotentMonoid соответственно.
>>> stimes 4 [1] [1,1,1,1]
Примеры
Определено в GHC.Base Методы(<>) :: [a] -> [a] -> [a] Исходный код sconcat :: NonEmpty [a] -> [a] Исходный код stimes :: Integral b => b -> [a] -> [a] Исходный код | |
| Semigroup a => Semigroup (Maybe a) | С версии: base-4.9.0.0 |
| Semigroup a => Semigroup (IO a) | С версии: base-4.10.0.0 |
| Semigroup p => Semigroup (Par1 p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: Par1 p -> Par1 p -> Par1 p Исходный код sconcat :: NonEmpty (Par1 p) -> Par1 p Исходный код stimes :: Integral b => b -> Par1 p -> Par1 p Исходный код | |
| Semigroup (NonEmpty a) | С версии: base-4.9.0.0 |
| Semigroup a => Semigroup (Down a) | С версии: base-4.11.0.0 |
| Num a => Semigroup (Product a) | С версии: base-4.9.0.0 |
Определено в Data.Semigroup.Internal Методы(<>) :: Product a -> Product a -> Product a Исходный код sconcat :: NonEmpty (Product a) -> Product a Исходный код stimes :: Integral b => b -> Product a -> Product a Исходный код | |
| Num a => Semigroup (Sum a) | С версии: base-4.9.0.0 |
Определено в GHC.Generics Методы(<>) :: U1 p -> U1 p -> U1 p Исходный код sconcat :: NonEmpty (U1 p) -> U1 p Исходный код stimes :: Integral b => b -> U1 p -> U1 p Исходный код | |
| (Semigroup a, Semigroup b) => Semigroup (a, b) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b) -> (a, b) -> (a, b) Исходный код sconcat :: NonEmpty (a, b) -> (a, b) Исходный код stimes :: Integral b0 => b0 -> (a, b) -> (a, b) Исходный код | |
| Semigroup a => Semigroup (ST s a) | С момента: base-4.11.0.0 |
| Semigroup (Proxy s) | С момента: base-4.9.0.0 |
Определено в Data.Proxy Методы(<>) :: Proxy s -> Proxy s -> Proxy s Исходный код sconcat :: NonEmpty (Proxy s) -> Proxy s Исходный код stimes :: Integral b => b -> Proxy s -> Proxy s Исходный код | |
| Semigroup a => Semigroup (Op a b) | |
Определено в Data.Functor.Contravariant Методы(<>) :: Op a b -> Op a b -> Op a b Исходный код sconcat :: NonEmpty (Op a b) -> Op a b Исходный код stimes :: Integral b0 => b0 -> Op a b -> Op a b Исходный код | |
| Semigroup (f p) => Semigroup (Rec1 f p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: Rec1 f p -> Rec1 f p -> Rec1 f p Исходный код sconcat :: NonEmpty (Rec1 f p) -> Rec1 f p Исходный код stimes :: Integral b => b -> Rec1 f p -> Rec1 f p Исходный код | |
| (Semigroup a, Semigroup b, Semigroup c) => Semigroup (a, b, c) | С момента: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c) -> (a, b, c) -> (a, b, c) Исходный код sconcat :: NonEmpty (a, b, c) -> (a, b, c) Исходный код stimes :: Integral b0 => b0 -> (a, b, c) -> (a, b, c) Исходный код | |
| Alternative f => Semigroup (Alt f a) | С момента: base-4.9.0.0 |
Определено в Data.Semigroup.Internal Методы(<>) :: Alt f a -> Alt f a -> Alt f a Исходный код sconcat :: Непустой (Alt f a) -> Alt f a Исходный код stimes :: Целочисленный b => b -> Alt f a -> Alt f a Исходный код | |
| (Применимый f, Полугруппа a) => Полугруппа (Ap f a) | С версии: base-4.12.0.0 |
Определено в Data.Monoid Методы(<>) :: Ap f a -> Ap f a -> Ap f a Исходный код sconcat :: Непустой (Ap f a) -> Ap f a Исходный код stimes :: Целочисленный b => b -> Ap f a -> Ap f a Исходный код | |
| Полугруппа a => Полугруппа (Const a b) | С версии: base-4.9.0.0 |
Определено в Data.Functor.Const Методы(<>) :: Const a b -> Const a b -> Const a b Исходный код sconcat :: Непустой (Const a b) -> Const a b Исходный код stimes :: Целочисленный b0 => b0 -> Const a b -> Const a b Исходный код | |
| Полугруппа c => Полугруппа (K1 i c p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: K1 i c p -> K1 i c p -> K1 i c p Исходный код sconcat :: Непустой (K1 i c p) -> K1 i c p Исходный код stimes :: Целочисленный b => b -> K1 i c p -> K1 i c p Исходный код | |
| (Полугруппа (f p), Полугруппа (g p)) => Полугруппа ((f :*: g) p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p Исходный код sconcat :: Непустой ((f :*: g) p) -> (f :*: g) p Исходный код stimes :: Целочисленный b => b -> (f :*: g) p -> (f :*: g) p Исходный код | |
| (Полугруппа a, Полугруппа b, Полугруппа c, Полугруппа d) => Полугруппа (a, b, c, d) | С версии: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Исходный код sconcat :: Непустой (a, b, c, d) -> (a, b, c, d) Исходный код stimes :: Целочисленный b0 => b0 -> (a, b, c, d) -> (a, b, c, d) Исходный код | |
| Полугруппа (f p) => Полугруппа (M1 i c f p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: M1 i c f p -> M1 i c f p -> M1 i c f p Исходный код sconcat :: NonEmpty (M1 i c f p) -> M1 i c f p Исходный код stimes :: Integral b => b -> M1 i c f p -> M1 i c f p Исходный код | |
| Semigroup (f (g p)) => Semigroup ((f :.: g) p) | С версии: base-4.12.0.0 |
Определено в GHC.Generics Методы(<>) :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Исходный код sconcat :: NonEmpty ((f :.: g) p) -> (f :.: g) p Исходный код stimes :: Integral b => b -> (f :.: g) p -> (f :.: g) p Исходный код | |
| (Semigroup a, Semigroup b, Semigroup c, Semigroup d, Semigroup e) => Semigroup (a, b, c, d, e) | С версии: base-4.9.0.0 |
Определено в GHC.Base Методы(<>) :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Исходный код sconcat :: NonEmpty (a, b, c, d, e) -> (a, b, c, d, e) Исходный код stimes :: Integral b0 => b0 -> (a, b, c, d, e) -> (a, b, c, d, e) Исходный код | |
class Semigroup a => Monoid a where Исходный код
Класс моноидов (типы с ассоциативной бинарной операцией, имеющей единицу). Экземпляры должны удовлетворять следующим условиям:
- Правая единица
x <> mempty = x- Левая единица
mempty <> x = x- Ассоциативность
-
x <> (y <> z) = (x <> y) <> z(Semigroupзакон) - Конкатенация
mconcat = foldr (<>) mempty
Имена методов относятся к моноиду списков при конкатенации, но существует множество других экземпляров.
Некоторые типы могут рассматриваться как моноид более чем одним способом, например, сложение и умножение на числах. В таких случаях мы часто определяем newtype и делаем эти экземпляры Monoid, например, Sum и Product.
ПРИМЕЧАНИЕ: Semigroup является суперклассом Monoid с версии base-4.11.0.0.
Минимальное полное определение
Методы
mempty :: a Исходный код
Единица mappend
>>> "Hello world" <> mempty "Hello world"
mappend :: a -> a -> a Исходный код
Ассоциативная операция
ПРИМЕЧАНИЕ: Этот метод избыточен и имеет реализацию по умолчанию mappend = (<>) с версии base-4.11.0.0. Если он реализуется вручную, поскольку mappend является синонимом для (<>), ожидается, что две функции определены одинаково. В будущей версии GHC mappend будет удален из Monoid.
mconcat :: [a] -> a Исходный код
Складывает список с помощью моноида.
Для большинства типов будет использоваться определение по умолчанию для mconcat, но функция включена в определение класса, чтобы можно было предоставить оптимизированную версию для конкретных типов.
>>> mconcat ["Hello", " ", "Haskell", "!"] "Hello Haskell!"
Экземпляры
| Monoid Ordering | Since: base-2.1 |
| Monoid () | Since: base-2.1 |
| Monoid Any | Since: base-2.1 |
| Monoid All | Since: base-2.1 |
| Monoid Lifetime |
Since: base-4.8.0.0 |
| Monoid Event | Since: base-4.4.0.0 |
| Monoid [a] | Since: base-2.1 |
| Semigroup a => Monoid (Maybe a) |
Поднять полугруппу в Since 4.11.0: ограничение на внутреннее Since: base-2.1 |
| Monoid a => Monoid (IO a) | Since: base-4.9.0.0 |
| Monoid (First a) | Since: base-2.1 |
| Monoid a => Monoid (Identity a) | Since: base-4.9.0.0 |
| Semigroup a => Monoid (Option a) | Since: base-4.9.0.0 |
| Monoid m => Monoid (WrappedMonoid m) | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methodsmempty :: WrappedMonoid m Source mappend :: WrappedMonoid m -> WrappedMonoid m -> WrappedMonoid m Source mconcat :: [WrappedMonoid m] -> WrappedMonoid m Source | |
| (Ord a, Bounded a) => Monoid (Max a) | Since: base-4.9.0.0 |
| (Ord a, Bounded a) => Monoid (Min a) | Since: base-4.9.0.0 |
| Monoid (Equivalence a) | |
Defined in Data.Functor.Contravariant Methodsmempty :: Equivalence a Source mappend :: Equivalence a -> Equivalence a -> Equivalence a Source mconcat :: [Equivalence a] -> Equivalence a Source | |
| Monoid (Comparison a) | |
Определено в Data.Functor.Contravariant Методыmempty :: Comparison a Источник mappend :: Comparison a -> Comparison a -> Comparison a Источник mconcat :: [Comparison a] -> Comparison a Источник | |
| Monoid (Predicate a) | |
| Monoid b => Monoid (a -> b) | С: base-2.1 |
| Monoid (U1 p) | С: base-4.12.0.0 |
| (Monoid a, Monoid b) => Monoid (a, b) | С: base-2.1 |
| Monoid a => Monoid (ST s a) | С: base-4.11.0.0 |
| Monoid (Proxy s) | С: base-4.7.0.0 |
| Monoid a => Monoid (Op a b) | |
| Monoid (f p) => Monoid (Rec1 f p) | Since: base-4.12.0.0 |
| (Monoid a, Monoid b, Monoid c) => Monoid (a, b, c) | Since: base-2.1 |
| Alternative f => Monoid (Alt f a) | Since: base-4.8.0.0 |
| (Applicative f, Monoid a) => Monoid (Ap f a) | Since: base-4.12.0.0 |
| Monoid a => Monoid (Const a b) | Since: base-4.9.0.0 |
| Monoid c => Monoid (K1 i c p) | Since: base-4.12.0.0 |
| (Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p) | Since: base-4.12.0.0 |
| (Monoid a, Monoid b, Monoid c, Monoid d) => Monoid (a, b, c, d) | Since: base-2.1 |
Определено в GHC.Base Методыmempty :: (a, b, c, d) Исходный код mappend :: (a, b, c, d) -> (a, b, c, d) -> (a, b, c, d) Исходный код mconcat :: [(a, b, c, d)] -> (a, b, c, d) Исходный код | |
| Monoid (f p) => Monoid (M1 i c f p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методыmempty :: M1 i c f p Исходный код mappend :: M1 i c f p -> M1 i c f p -> M1 i c f p Исходный код mconcat :: [M1 i c f p] -> M1 i c f p Исходный код | |
| Monoid (f (g p)) => Monoid ((f :.: g) p) | С момента: base-4.12.0.0 |
Определено в GHC.Generics Методыmempty :: (f :.: g) p Исходный код mappend :: (f :.: g) p -> (f :.: g) p -> (f :.: g) p Исходный код mconcat :: [(f :.: g) p] -> (f :.: g) p Исходный код | |
| (Monoid a, Monoid b, Monoid c, Monoid d, Monoid e) => Monoid (a, b, c, d, e) | С момента: base-2.1 |
Определено в GHC.Base Методыmempty :: (a, b, c, d, e) Исходный код mappend :: (a, b, c, d, e) -> (a, b, c, d, e) -> (a, b, c, d, e) Исходный код mconcat :: [(a, b, c, d, e)] -> (a, b, c, d, e) Исходный код | |
data Opaque Исходный код
Конструкторы
| forall a. O a |
type String = [Char] Исходный код
A String — это список символов. Строковые константы в Haskell — это значения типа String.
См. Data.List для операций над списками.
data NonEmpty a Исходный код
Тип списка, не пустого (и не строгого).
С момента: base-4.9.0.0
Конструкторы
| a :| [a] infixr 5 |
Экземпляры
| Monad NonEmpty | Since: base-4.9.0.0 |
| Functor NonEmpty | Since: base-4.9.0.0 |
| MonadFix NonEmpty | Since: base-4.9.0.0 |
Defined in Control.Monad.Fix | |
| Applicative NonEmpty | Since: base-4.9.0.0 |
Defined in GHC.Base | |
| Foldable NonEmpty | Since: base-4.9.0.0 |
Defined in Data.Foldable Методыfold :: Monoid m => NonEmpty m -> m Source foldMap :: Monoid m => (a -> m) -> NonEmpty a -> m Source foldMap' :: Monoid m => (a -> m) -> NonEmpty a -> m Source foldr :: (a -> b -> b) -> b -> NonEmpty a -> b Source foldr' :: (a -> b -> b) -> b -> NonEmpty a -> b Source foldl :: (b -> a -> b) -> b -> NonEmpty a -> b Source foldl' :: (b -> a -> b) -> b -> NonEmpty a -> b Source foldr1 :: (a -> a -> a) -> NonEmpty a -> a Source foldl1 :: (a -> a -> a) -> NonEmpty a -> a Source toList :: NonEmpty a -> [a] Source null :: NonEmpty a -> Bool Source length :: NonEmpty a -> Int Source elem :: Eq a => a -> NonEmpty a -> Bool Source maximum :: Ord a => NonEmpty a -> a Source minimum :: Ord a => NonEmpty a -> a Source | |
| Traversable NonEmpty | Since: base-4.9.0.0 |
Определено в Data.Traversable | |
| MonadZip NonEmpty | Since: base-4.9.0.0 |
| Show1 NonEmpty | Since: base-4.10.0.0 |
| Read1 NonEmpty | Since: base-4.10.0.0 |
Определено в Data.Functor.Classes МетодыliftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (NonEmpty a) Source liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [NonEmpty a] Source liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (NonEmpty a) Source liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [NonEmpty a] Source | |
| Ord1 NonEmpty | Since: base-4.10.0.0 |
Определено в Data.Functor.Classes | |
| Eq1 NonEmpty | Since: base-4.10.0.0 |
| IsList (NonEmpty a) | Since: base-4.9.0.0 |
| Eq a => Eq (NonEmpty a) | Since: base-4.9.0.0 |
| Data a => Data (NonEmpty a) | Since: base-4.9.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NonEmpty a -> c (NonEmpty a) Source gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NonEmpty a) Source toConstr :: NonEmpty a -> Constr Source dataTypeOf :: NonEmpty a -> DataType Source dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NonEmpty a)) Source dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NonEmpty a)) Source gmapT :: (forall b. Data b => b -> b) -> NonEmpty a -> NonEmpty a Source gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NonEmpty a -> r Source gmapQ :: (forall d. Data d => d -> u) -> NonEmpty a -> [u] Source gmapQi :: Int -> (forall d. Data d => d -> u) -> NonEmpty a -> u Source gmapM :: Monad m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NonEmpty a -> m (NonEmpty a) Source | |
| Ord a => Ord (NonEmpty a) | Since: base-4.9.0.0 |
| type Rep (NonEmpty a) | |
Определено в GHC.Generics type Rep (NonEmpty a) = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'LeftAssociative 9) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a]))) | |
| type Item (NonEmpty a) | |
| type Rep1 NonEmpty | |
Определено в GHC.Generics type Rep1 NonEmpty = D1 ('MetaData "NonEmpty" "GHC.Base" "base" 'False) (C1 ('MetaCons ":|" ('InfixI 'LeftAssociative 9) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 []))) | |
class (Alternative m, Monad m) => MonadPlus m where Исходный код
Моноиды, которые также поддерживают выбор и ошибки.
Минимальное полное определение
Nothing
Методы
mzero :: m a Исходный код
Тождество mplus. Оно также должно удовлетворять уравнениям
mzero >>= f = mzero v >> mzero = mzero
По умолчанию определение:
mzero = empty
mplus :: m a -> m a -> m a Исходный код
Ассоциативная операция. По умолчанию определение:
mplus = (<|>)
Экземпляры
| MonadPlus [] | С версии: base-2.1 |
| MonadPlus Maybe | С версии: base-2.1 |
| MonadPlus IO | С версии: base-4.9.0.0 |
| MonadPlus ReadP | С версии: base-2.1 |
| MonadPlus ReadPrec | С версии: base-2.1 |
| MonadPlus STM | С версии: base-4.3.0.0 |
| MonadPlus Option | С версии: base-4.9.0.0 |
| MonadPlus (U1 :: Type -> Type) | С версии: base-4.9.0.0 |
| MonadPlus (Proxy :: Type -> Type) | С версии: base-4.9.0.0 |
| (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) | С версии: base-4.6.0.0 |
Определено в Control.Arrow Методыmzero :: ArrowMonad a a0 Source mplus :: ArrowMonad a a0 -> ArrowMonad a a0 -> ArrowMonad a a0 Source | |
| MonadPlus f => MonadPlus (Rec1 f) | Since: base-4.9.0.0 |
| MonadPlus f => MonadPlus (Alt f) | Since: base-4.8.0.0 |
| MonadPlus f => MonadPlus (Ap f) | Since: base-4.12.0.0 |
| MonadPlus m => MonadPlus (Kleisli m a) | Since: base-4.14.0.0 |
| (MonadPlus f, MonadPlus g) => MonadPlus (f :*: g) | Since: base-4.9.0.0 |
| (MonadPlus f, MonadPlus g) => MonadPlus (Product f g) | Since: base-4.9.0.0 |
| MonadPlus f => MonadPlus (M1 i c f) | Since: base-4.9.0.0 |
class Applicative f => Alternative f where Source
Моноид на аппликативных функторах.
Если определено, some и many должны быть наименьшими решениями уравнений:
Экземпляры
| 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 |
Определено в 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 | |
| (Alternative f, Alternative g) => Alternative (f :*: g) | Since: base-4.9.0.0 |
| (Alternative f, Alternative g) => Alternative (Product f g) | Since: base-4.9.0.0 |
| Alternative f => Alternative (M1 i c f) | Since: base-4.9.0.0 |
| (Alternative f, Applicative g) => Alternative (f :.: g) | Since: base-4.9.0.0 |
| (Alternative f, Applicative g) => Alternative (Compose f g) | Since: base-4.9.0.0 |
(<**>) :: Applicative f => f a -> f (a -> b) -> f b infixl 4 Source
Вариант <*> с измененным порядком аргументов.
Используя ApplicativeDo: 'as <**> fs' можно понимать как выражение do
do a <- as f <- fs pure (f a)
liftA :: Applicative f => (a -> b) -> f a -> f b Source
Поднять функцию до действий. Эта функция может использоваться как значение для 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 Source
Поднять тернарную функцию до действий.
Используя ApplicativeDo: 'liftA3 f as bs cs' можно понимать как выражение do
do a <- as b <- bs c <- cs pure (f a b c)
(=<<) :: Монад m => (a -> m b) -> m a -> m b infixr 1 Source
То же самое, что >>=, но с аргументами, поменянными местами.
when :: Прикладной f => Булево -> f () -> f () Source
Условное выполнение Applicative выражений. Например,
when debug (putStrLn "Debugging")
выведет строку Debugging, если булево значение debug является True, и в противном случае ничего не сделает.
sequence :: Монад m => [m a] -> m [a] Source
Выполнить каждое действие в последовательности слева направо и собрать результаты.
mapM :: Монад m => (a -> m b) -> [a] -> m [b] Source
mapM f эквивалентно sequence . map f.
liftM :: Монад m => (a1 -> r) -> m a1 -> m r Source
Поднять функцию в монаду.
liftM2 :: Монад m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r Source
Поднять функцию в монаду, сканируя монадические аргументы слева направо. Например,
liftM2 (+) [0,1] [0,2] = [0,2,1,3] liftM2 (+) (Just 1) Nothing = Nothing
liftM3 :: Монад m => (a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r Source
Поднять функцию в монаду, сканируя монадические аргументы слева направо (см. liftM2).
liftM4 :: Монад m => (a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r Source
Поднять функцию в монаду, сканируя монадические аргументы слева направо (см. liftM2).
liftM5 :: Монад m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r Source
Поднять функцию в монаду, сканируя монадические аргументы слева направо (см. liftM2).
ap :: Монад m => m (a -> b) -> m a -> m b Source
Во многих ситуациях, liftM операции могут быть заменены использованием ap, что повышает функцию применения.
return f `ap` x1 `ap` ... `ap` xn
эквивалентно
liftMn f x1 x2 ... xn
mapFB :: (elt -> lst -> lst) -> (a -> elt) -> a -> lst -> lst Source
unsafeChr :: Целое -> Символ Source
Метод fromEnum ограничен типом Char.
Функция тождества.
id x = x
const x — это функция с одним аргументом, которая возвращает x для всех входных данных.
>>> const 42 "hello" 42
>>> map (const 42) [0..3] [42,42,42,42]
(.) :: (b -> c) -> (a -> b) -> a -> c infixr 9 Source
Состав функций.
flip :: (a -> b -> c) -> b -> a -> c Source
flip f принимает свои (первые) два аргумента в обратном порядке по сравнению с f.
>>> flip (++) "hello" "world" "worldhello"
($!) :: forall r a (b :: Тип r). (a -> b) -> a -> b infixr 0 Source
Строгое (вызов по значению) оператор применения. Он принимает функцию и аргумент, оценивает аргумент до слабой нормальной формы (СНФ), а затем вызывает функцию с этим значением.
until :: (a -> Булево) -> (a -> a) -> a -> a Source
until p f возвращает результат применения f до тех пор, пока p не станет истинным.
asTypeOf :: a -> a -> a Source
asTypeOf — это ограниченная типом версия const . Она обычно используется как инфиксный оператор, и её типизация принуждает её первый аргумент (который обычно перегружен) иметь тот же тип, что и второй.
failIO :: Строка -> IO a Source
unIO :: IO a -> State# RealWorld -> (# State# RealWorld, a #) Source
Возвращает тег применения конструктора; эта функция используется кодом для вывода Eq, Ord и Enum.
quotInt :: Целое -> Целое -> Целое Source
remInt :: Целое -> Целое -> Целое Source
divInt :: Целое -> Целое -> Целое Source
divModInt :: Int -> Int -> (Int, Int) Источник
divModInt# :: Int# -> Int# -> (# Int#, Int# #) Источник
shiftL# :: Word# -> Int# -> Word# Источник
Сдвиг аргумента влево на указанное количество битов (которое должно быть неотрицательным).
shiftRL# :: Word# -> Int# -> Word# Источник
Сдвиг аргумента вправо на указанное количество битов (которое должно быть неотрицательным). RL означает "вправо, логическое" (в отличие от RA для арифметического) (хотя арифметический сдвиг вправо не имеет смысла для Word#).
iShiftL# :: Int# -> Int# -> Int# Источник
Сдвиг аргумента влево на указанное количество битов (которое должно быть неотрицательным).
iShiftRA# :: Int# -> Int# -> Int# Источник
Сдвиг аргумента вправо (знаковый) на указанное количество битов (которое должно быть неотрицательным). RA означает "вправо, арифметическое" (в отличие от RL для логического)
iShiftRL# :: Int# -> Int# -> Int# Источник
Сдвиг аргумента вправо (беззнаковый) на указанное количество битов (которое должно быть неотрицательным). RL означает "вправо, логическое" (в отличие от RA для арифметического)
module GHC.Classes
module GHC.CString
module GHC.Magic
module GHC.Types
module GHC.Prim
module GHC.Prim.Ext
module GHC.Err
module GHC.Maybe
© 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/GHC-Base.html