Data.Functor.Contravariant
| Авторские права | (C) 2007-2015 Edward Kmett |
|---|---|
| Лицензия | BSD-стиль (см. файл LICENSE) |
| Поддержка | libraries@haskell.org |
| Стабильность | временная |
| Переносимость | переносимая |
| Безопасный Haskell | Достоверный |
| Язык | Haskell2010 |
Описание
Contravariant функторы, иногда называемые Cofunctor, хотя двойной Functor - это просто Functor. Как и Functor, определение Contravariant для данного ADT однозначно.
С момента: base-4.12.0.0
Контравариантные функторы
class Contravariant f where Источник
Класс контравариантных функторов.
В то время как в Haskell можно представить Functor как содержащий или производящий значения, контравариантный функтор - это функтор, который можно рассматривать как потребляющий значения.
Например, рассмотрим тип предикатных функций a -> Bool. Один из таких предикатов может быть negative x = x < 0, который классифицирует целые числа по тому, являются ли они отрицательными. Однако, учитывая этот предикат, мы можем повторно использовать его в других ситуациях, если у нас есть способ сопоставления значений с целыми числами. Например, мы можем использовать предикат negative для баланса банковского счета человека, чтобы определить, имеет ли он отрицательный баланс:
newtype Predicate a = Predicate { getPredicate :: a -> Bool }
instance Contravariant Predicate where
contramap f (Predicate p) = Predicate (p . f)
| `- First, map the input...
`----- then apply the predicate.
overdrawn :: Predicate Person
overdrawn = contramap personBankBalance negative
Любой экземпляр должен подчиняться следующим законам:
Обратите внимание, что второй закон следует из свободной теоремы типа contramap и первого закона, поэтому вам нужно только проверить, выполняется ли первое условие.
Минимальное полное определение
Методы
contramap :: (a -> b) -> f b -> f a Источник
(>$) :: b -> f b -> f a infixl 4 Источник
Замените все места в выводе одним и тем же значением. По умолчанию определено как contramap . const, но это может быть переопределено более эффективной версией.
Экземпляры
| Contravariant Equivalence | Отношения эквивалентности являются |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Equivalence b -> Equivalence a Source (>$) :: b -> Equivalence b -> Equivalence a Source | |
| Contravariant Comparison | A |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Comparison b -> Comparison a Source (>$) :: b -> Comparison b -> Comparison a Source | |
| Contravariant Predicate | A |
| Contravariant (V1 :: Type -> Type) | |
| Contravariant (U1 :: Type -> Type) | |
| Contravariant (Proxy :: Type -> Type) | |
| Contravariant (Op a) | |
| Contravariant f => Contravariant (Rec1 f) | |
| Contravariant f => Contravariant (Alt f) | |
| Contravariant (Const a :: Type -> Type) | |
| Contravariant (K1 i c :: Type -> Type) | |
| (Contravariant f, Contravariant g) => Contravariant (f :+: g) | |
| (Contravariant f, Contravariant g) => Contravariant (f :*: g) | |
| (Contravariant f, Contravariant g) => Contravariant (Sum f g) | |
| (Contravariant f, Contravariant g) => Contravariant (Product f g) | |
| Contravariant f => Contravariant (M1 i c f) | |
| (Функтор f, Противовариант g) => Противовариант (f :.: g) | |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> (f :.: g) b -> (f :.: g) a Исходный код (>$) :: b -> (f :.: g) b -> (f :.: g) a Исходный код | |
| (Функтор f, Противовариант g) => Противовариант (Compose f g) | |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Compose f g b -> Compose f g a Исходный код (>$) :: b -> Compose f g b -> Compose f g a Исходный код | |
phantom :: (Функтор f, Противовариант f) => f a -> f b Исходный код
Если f является одновременно Functor и Contravariant, то к моменту учёта законов каждого из этих классов, он фактически не может использовать свой аргумент в каком-либо осмысленном контексте.
Этот метод оказывается неожиданно полезным. Если оба экземпляра существуют и соответствуют требованиям, мы имеем следующие законы:
fmap f ≡ phantom contramap f ≡ phantom
Операторы
(>$<) :: Противовариант f => (a -> b) -> f b -> f a infixl 4 Исходный код
Это инфиксный псевдоним для contramap.
(>$$<) :: Противовариант f => f b -> (a -> b) -> f a infixl 4 Исходный код
Это инфиксная версия contramap с переставленными аргументами.
($<) :: Противовариант f => f b -> b -> f a infixl 4 Исходный код
Это >$ с переставленными аргументами.
Предикаты
newtype Predicate a Исходный код
Конструкторы
| Predicate | |
Поля
| |
Экземпляры
| Противовариант Predicate | A |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Predicate b -> Predicate a Исходный код (>$) :: b -> Predicate b -> Predicate a Исходный код | |
| Полугруппа (Predicate a) | |
Определено в Data.Functor.Contravariant Методы(<>) :: Predicate a -> Predicate a -> Predicate a Исходный код sconcat :: Непустой список (Predicate a) -> Predicate a Исходный код stimes :: Целочисленный b => b -> Predicate a -> Predicate a Исходный код | |
| Моноид (Predicate a) | |
Определено в Data.Functor.Contravariant Методыmempty :: Predicate a Исходный код mappend :: Predicate a -> Predicate a -> Predicate a Исходный код mconcat :: [Predicate a] -> Predicate a Исходный код | |
Сравнения
newtype Comparison a Source
Определяет полное упорядочение на типе в соответствии с compare.
Это условие не проверяется типами. Вы должны убедиться, что предоставленные значения являются действительными полными упорядочениями.
Конструкторы
| Comparison | |
Поля
| |
Примеры использования
| Contravariant Comparison | A |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Comparison b -> Comparison a Source (>$) :: b -> Comparison b -> Comparison a Source | |
| Semigroup (Comparison a) | |
Определено в Data.Functor.Contravariant Методы(<>) :: Comparison a -> Comparison a -> Comparison a Source sconcat :: NonEmpty (Comparison a) -> Comparison a Source stimes :: Integral b => b -> Comparison a -> Comparison a Source | |
| Monoid (Comparison a) | |
Определено в Data.Functor.Contravariant Методыmempty :: Comparison a Source mappend :: Comparison a -> Comparison a -> Comparison a Source mconcat :: [Comparison a] -> Comparison a Source | |
defaultComparison :: Ord a => Comparison a Source
Сравнение с использованием compare.
Отношения эквивалентности
newtype Equivalence a Source
Этот тип данных представляет отношение эквивалентности.
Ожидается, что отношения эквивалентности удовлетворяют трём законам:
- Рефлексивность
getEquivalence f a a = True- Симметричность
getEquivalence f a b = getEquivalence f b a- Транзитивность
- Если
getEquivalence f a bиgetEquivalence f b cобаTrue, то иgetEquivalence f a cтоже.
Типы сами по себе не навязывают этих законов, поэтому вам нужно проверить их самостоятельно.
Конструкторы
| Equivalence | |
Поля
| |
Примеры реализации
| Контравариант Равнозначность | Отношения равнозначности |
Определено в Data.Functor.Contravariant Методыcontramap :: (a -> b) -> Равнозначность b -> Равнозначность a Исходный код (>$) :: b -> Равнозначность b -> Равнозначность a Исходный код | |
| Полугруппа (Равнозначность a) | |
Определено в Data.Functor.Contravariant Методы(<>) :: Равнозначность a -> Равнозначность a -> Равнозначность a Исходный код sconcat :: Непустой список (Равнозначность a) -> Равнозначность a Исходный код stimes :: Целочисленное b => b -> Равнозначность a -> Равнозначность a Исходный код | |
| Моноид (Равнозначность a) | |
Определено в Data.Functor.Contravariant Методыmempty :: Равнозначность a Исходный код mappend :: Равнозначность a -> Равнозначность a -> Равнозначность a Исходный код mconcat :: [Равнозначность a] -> Равнозначность a Исходный код | |
defaultEquivalence :: Eq a => Равнозначность a Исходный код
Проверка на равнозначность с ==.
Примечание: Примеры реализации для Double и Float нарушают рефлексивность для NaN.
comparisonEquivalence :: Сравнение a -> Равнозначность a Исходный код
Двойные стрелки
newtype Op a b Исходный код
Двойные функциональные стрелки.
Примеры реализации
| Contravariant (Op a) | |
| Category Op | |
| Floating a => Floating (Op a b) | |
Определено в Data.Functor.Contravariant Методыexp :: Op a b -> Op a b Source log :: Op a b -> Op a b Source sqrt :: Op a b -> Op a b Source (**) :: Op a b -> Op a b -> Op a b Source logBase :: Op a b -> Op a b -> Op a b Source sin :: Op a b -> Op a b Source cos :: Op a b -> Op a b Source tan :: Op a b -> Op a b Source asin :: Op a b -> Op a b Source acos :: Op a b -> Op a b Source atan :: Op a b -> Op a b Source sinh :: Op a b -> Op a b Source cosh :: Op a b -> Op a b Source tanh :: Op a b -> Op a b Source asinh :: Op a b -> Op a b Source acosh :: Op a b -> Op a b Source atanh :: Op a b -> Op a b Source log1p :: Op a b -> Op a b Source expm1 :: Op a b -> Op a b Source | |
| Fractional a => Fractional (Op a b) | |
Определено в Data.Functor.Contravariant Методы(/) :: Op a b -> Op a b -> Op a b Исходный код recip :: Op a b -> Op a b Исходный код fromRational :: Rational -> Op a b Исходный код | |
| Num a => Num (Op a b) | |
Определено в Data.Functor.Contravariant Методы(+) :: Op a b -> Op a b -> Op a b Исходный код (-) :: Op a b -> Op a b -> Op a b Исходный код (*) :: Op a b -> Op a b -> Op a b Исходный код negate :: Op a b -> Op a b Исходный код abs :: Op a b -> Op a b Исходный код signum :: Op a b -> Op a b Исходный код fromInteger :: Integer -> Op a b Исходный код | |
| 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 Исходный код | |
| Monoid a => Monoid (Op a b) | |
Определено в Data.Functor.Contravariant Методыmempty :: Op a b Исходный код mappend :: Op a b -> Op a b -> Op a b Исходный код mconcat :: [Op a b] -> Op a b Исходный код | |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Functor-Contravariant.html