Spec-Zone.ru › Haskell 8

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 id = id
Композиция
contramap (g . f) = contramap f . contramap g

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

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

contramap

Методы

contramap :: (a -> b) -> f b -> f a Источник

(>$) :: b -> f b -> f a infixl 4 Источник

Замените все места в выводе одним и тем же значением. По умолчанию определено как contramap . const, но это может быть переопределено более эффективной версией.

Экземпляры
Подробности о примерах
Contravariant Equivalence

Отношения эквивалентности являются Contravariant, поскольку вы можете применить функцию contramapped к каждому входу в отношение эквивалентности.

Подробности о примере

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

Методы

contramap :: (a -> b) -> Equivalence b -> Equivalence a Source

(>$) :: b -> Equivalence b -> Equivalence a Source

Contravariant Comparison

A Comparison is a Contravariant Functor, because contramap can apply its function argument to each input of the comparison function.

Подробности о примере

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

Методы

contramap :: (a -> b) -> Comparison b -> Comparison a Source

(>$) :: b -> Comparison b -> Comparison a Source

Contravariant Predicate

A Predicate is a Contravariant Functor, because contramap can apply its function argument to the input of the predicate.

Подробности о примере

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

Методы

contramap :: (a -> b) -> Predicate b -> Predicate a Source

(>$) :: b -> Predicate b -> Predicate a Source

Contravariant (V1 :: Type -> Type)
Подробности о примере

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

Методы

contramap :: (a -> b) -> V1 b -> V1 a Source

(>$) :: b -> V1 b -> V1 a Source

Contravariant (U1 :: Type -> Type)
Подробности о примере

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

Методы

contramap :: (a -> b) -> U1 b -> U1 a Source

(>$) :: b -> U1 b -> U1 a Source

Contravariant (Proxy :: Type -> Type)
Подробности о примере

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

Методы

contramap :: (a -> b) -> Proxy b -> Proxy a Source

(>$) :: b -> Proxy b -> Proxy a Source

Contravariant (Op a)
Подробности о примере

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

Методы

contramap :: (a0 -> b) -> Op a b -> Op a a0 Source

(>$) :: b -> Op a b -> Op a a0 Source

Contravariant f => Contravariant (Rec1 f)
Подробности о примере

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

Методы

contramap :: (a -> b) -> Rec1 f b -> Rec1 f a Source

(>$) :: b -> Rec1 f b -> Rec1 f a Source

Contravariant f => Contravariant (Alt f)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> Alt f b -> Alt f a Source

(>$) :: b -> Alt f b -> Alt f a Source

Contravariant (Const a :: Type -> Type)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a0 -> b) -> Const a b -> Const a a0 Source

(>$) :: b -> Const a b -> Const a a0 Source

Contravariant (K1 i c :: Type -> Type)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> K1 i c b -> K1 i c a Source

(>$) :: b -> K1 i c b -> K1 i c a Source

(Contravariant f, Contravariant g) => Contravariant (f :+: g)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> (f :+: g) b -> (f :+: g) a Source

(>$) :: b -> (f :+: g) b -> (f :+: g) a Source

(Contravariant f, Contravariant g) => Contravariant (f :*: g)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> (f :*: g) b -> (f :*: g) a Source

(>$) :: b -> (f :*: g) b -> (f :*: g) a Source

(Contravariant f, Contravariant g) => Contravariant (Sum f g)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> Sum f g b -> Sum f g a Source

(>$) :: b -> Sum f g b -> Sum f g a Source

(Contravariant f, Contravariant g) => Contravariant (Product f g)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> Product f g b -> Product f g a Source

(>$) :: b -> Product f g b -> Product f g a Source

Contravariant f => Contravariant (M1 i c f)
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a -> b) -> M1 i c f b -> M1 i c f a Source

(>$) :: b -> M1 i c f b -> M1 i c f a Source

(Функтор 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

Поля

  • getPredicate :: a -> Bool
Экземпляры
Подробности экземпляров
Противовариант Predicate

A Predicate является Contravariant Functor, поскольку contramap может применить свой аргумент-функцию к входному значению предиката.

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

Определено в 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

Поля

  • getComparison :: a -> a -> Ordering
Примеры использования
Подробности примеров использования
Contravariant Comparison

A Comparison является Contravariant Functor, потому что contramap может применить свой аргумент функции к каждому входу функции сравнения.

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

Определено в 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

Поля

  • getEquivalence :: a -> a -> Bool
Примеры реализации
Подробности примеров реализации
Контравариант Равнозначность

Отношения равнозначности Contravariant, потому что вы можете применить контраотображённую функцию к каждому входу в отношение равнозначности.

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

Определено в 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 Исходный код

Двойные функциональные стрелки.

Конструкторы

Op

Поля

  • getOp :: b -> a
Примеры реализации
Подробности о реализациях
Contravariant (Op a)
Подробности о реализации

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

Методы

contramap :: (a0 -> b) -> Op a b -> Op a a0 Source

(>$) :: b -> Op a b -> Op a a0 Source

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

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

Методы

id :: forall (a :: k). Op a a Source

(.) :: forall (b :: k) (c :: k) (a :: k). Op b c -> Op a b -> Op a c Source

Floating a => Floating (Op a b)
Подробности о реализации

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

Методы

pi :: Op a b Source

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

log1pexp :: Op a b -> Op a b Source

log1mexp :: 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

Spec-Zone.ru

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