Spec-Zone.ru › Haskell 9

Data.Functor.Contravariant

Авторские права (C) 2007-2015 Edward Kmett
Лицензия BSD-стиль (см. файл LICENSE)
Поддержка libraries@haskell.org
Устойчивость предварительная
Переносимость переносимая
Safe Haskell Надежная
Язык Haskell2010

Содержание

  • Контравариантные функторы
  • Операторы
  • Предикаты
  • Сравнения
  • Отношения эквивалентности
  • Двойные стрелки

Описание

Contravariant функторы, иногда называемые Cofunctor, хотя дуальный Functor — это просто Functor. Как и в случае с Functor, определение Contravariant для данного АДТ однозначно.

С версии: base-4.12.0.0

Контравариантные функторы

class Contravariant (f :: Type -> Type) where Источник

Класс контравариантных функторов.

В то время как в Haskell можно представить Functor как содержащие или производящие значения, контравариантный функтор — это функтор, который можно представить как потребляющий значения.

Например, рассмотрим тип функций-предикатов a -> Bool. Одним из таких предикатов может быть negative x = x < 0, который классифицирует целые числа как отрицательные или нет. Однако, с этим предикатом мы можем повторно использовать его в других ситуациях, если у нас есть способ отобразить значения в целые числа. Например, мы можем использовать предикат negative для баланса счета клиента, чтобы узнать, есть ли у него задолженность:

newtype Predicate a = Predicate { getPredicate :: a -> Bool }

instance Contravariant Predicate where
  contramap :: (a' -> a) -> (Predicate a -> Predicate a')
  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' -> a) -> f a -> f a' Источник

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

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

Примеры реализации
Подробности примеров
Contravariant Сравнение Исходный код

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

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

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

Методы

contramap :: (a' -> a) -> Сравнение a -> Сравнение a' Исходный код

(>$) :: b -> Сравнение b -> Сравнение a Исходный код

Contravariant Эквивалентность Исходный код

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

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

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

Методы

contramap :: (a' -> a) -> Эквивалентность a -> Эквивалентность a' Исходный код

(>$) :: b -> Эквивалентность b -> Эквивалентность a Исходный код

Contravariant Предикат Исходный код

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

Без newtypes contramap f равно применению функции f (= (. f)).

contramap :: (a' -> a) -> (Predicate a -> Predicate a')
contramap f (Predicate g) = Predicate (g . f)
Подробности реализации

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

Методы

contramap :: (a' -> a) -> Предикат a -> Предикат a' Исходный код

(>$) :: b -> Предикат b -> Предикат a Исходный код

Contravariant (Оператор a) Исходный код
Подробности реализации

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

Методы

contramap :: (a' -> a0) -> Оператор a a0 -> Оператор a a' Исходный код

(>$) :: b -> Оператор a b -> Оператор a a0 Исходный код

Contravariant (Прокси :: Тип -> Тип) Исходный код
Подробности реализации

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

Методы

contramap :: (a' -> a) -> Прокси a -> Прокси a' Исходный код

(>$) :: b -> Прокси b -> Прокси a Исходный код

Contravariant (U1 :: Тип -> Тип) Исходный код
Подробности реализации

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

Методы

contramap :: (a' -> a) -> U1 a -> U1 a' Исходный код

(>$) :: b -> U1 b -> U1 a Исходный код

Contravariant (V1 :: Тип -> Тип) Исходный код
Подробности реализации

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

Методы

contramap :: (a' -> a) -> V1 a -> V1 a' Исходный код

(>$) :: b -> V1 b -> V1 a Исходный код

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

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

Методы

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

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

Contravariant f => Contravariant (Alt f) Source
Instance details

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

Методы

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

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

Contravariant f => Contravariant (Rec1 f) Source
Instance details

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

Методы

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

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

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

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

Методы

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

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

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

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

Методы

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

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

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

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

Методы

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

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

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

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

Методы

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

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

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

Defined in Data.Functor.Contravariant

Методы

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

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

(Functor f, Contravariant g) => Contravariant (Compose f g) Source
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a' -> a) -> Compose f g a -> Compose f g a' Source

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

(Functor f, Contravariant g) => Contravariant (f :.: g) Source
Instance details

Defined in Data.Functor.Contravariant

Методы

contramap :: (a' -> a) -> (f :.: g) a -> (f :.: g) a' Source

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

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

Defined in Data.Functor.Contravariant

Методы

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

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

phantom :: (Functor f, Contravariant f) => f a -> f b Source

Если f является одновременно Functor и Contravariant, то, учитывая законы каждого из этих классов, он фактически не может использовать свой аргумент осмысленным образом.

Этот метод удивительно полезен. Когда существуют оба экземпляра и они корректны, мы имеем следующие законы:

fmap      f ≡ phantom
contramap f ≡ phantom

Операторы

(>$<) :: Contravariant f => (a -> b) -> f b -> f a infixl 4 Source

Это инфиксное алиас для contramap.

(>$$<) :: Contravariant f => f b -> (a -> b) -> f a infixl 4 Source

Это инфиксная версия contramap с переставленными аргументами.

($<) :: Contravariant f => f b -> b -> f a infixl 4 Source

Это >$ с переставленными аргументами.

Предикаты

newtype Predicate a Source

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

Predicate

Поля

  • getPredicate :: a -> Bool
Примеры использования
Подробности примеров использования
Contravariant Predicate Исходный код

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

Без newtypes contramap f равно предварительному композированию с f (= (. f)).

contramap :: (a' -> a) -> (Predicate a -> Predicate a')
contramap f (Predicate g) = Predicate (g . f)
Подробности примера

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

Методы

contramap :: (a' -> a) -> Predicate a -> Predicate a' Исходный код

(>$) :: b -> Predicate b -> Predicate a Исходный код

Monoid (Predicate a) Исходный код

mempty для предикатов всегда возвращает True. Без newtypes это равно pure True.

mempty :: Predicate a
mempty = _ -> True
Подробности примера

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

Методы

mempty :: Predicate a Исходный код

mappend :: Predicate a -> Predicate a -> Predicate a Исходный код

mconcat :: [Predicate a] -> Predicate a Исходный код

Semigroup (Predicate a) Исходный код

(<>) для предикатов использует логическое объединение (&&) по результатам. Без newtypes это равно liftA2 (&&).

(<>) :: Predicate a -> Predicate a -> Predicate a
Predicate pred <> Predicate pred' = Predicate a ->
  pred a && pred' a
Подробности примера

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

Методы

(<>) :: Predicate a -> Predicate a -> Predicate a Исходный код

sconcat :: NonEmpty (Predicate a) -> Predicate a Исходный код

stimes :: Integral b => b -> Predicate a -> Predicate a Исходный код

Сравнения

newtype Comparison a Исходный код

Определяет полное упорядочение на типе, как указано в compare.

Это условие не проверяется типами. Вы должны сами убедиться, что предоставленные значения являются действительными полными упорядочениями.

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

Comparison

Поля

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

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

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

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

Методы

contramap :: (a' -> a) -> Comparison a -> Comparison a' Исходный код

(>$) :: b -> Comparison b -> Comparison a Исходный код

Моноид (Comparison a) Исходный код

mempty для сравнений всегда возвращает EQ. Без newtypes это равно pure (pure EQ).

mempty :: Comparison a
mempty = Comparison _ _ -> EQ
Подробности примера

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

Методы

mempty :: Comparison a Исходный код

mappend :: Comparison a -> Comparison a -> Comparison a Исходный код

mconcat :: [Comparison a] -> Comparison a Исходный код

Полугруппа (Comparison a) Исходный код

(<>) для сравнений объединяет результаты с помощью (<>) @Ordering. Без newtypes это равно liftA2 (liftA2 (<>)).

(<>) :: Comparison a -> Comparison a -> Comparison a
Comparison cmp <> Comparison cmp' = Comparison a a' ->
  cmp a a' <> cmp a a'
Подробности примера

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

Методы

(<>) :: Comparison a -> Comparison a -> Comparison a Исходный код

sconcat :: NonEmpty (Comparison a) -> Comparison a Исходный код

stimes :: Целое b => b -> Comparison a -> Comparison a Исходный код

defaultComparison :: Ord a => Comparison a Исходный код

Сравнение с помощью compare.

Отношения эквивалентности

newtype Equivalence a Исходный код

Этот тип данных представляет отношение эквивалентности.

Отношения эквивалентности должны удовлетворять трём законам:

Рефлексивность
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 Equivalence Исходный код

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

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

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

Методы

contramap :: (a' -> a) -> Equivalence a -> Equivalence a' Исходный код

(>$) :: b -> Equivalence b -> Equivalence a Исходный код

Monoid (Equivalence a) Исходный код

mempty для эквивалентностей всегда возвращает True. Без newtypes это равно pure (pure True).

mempty :: Equivalence a
mempty = Equivalence _ _ -> True
Подробности примера

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

Методы

mempty :: Equivalence a Исходный код

mappend :: Equivalence a -> Equivalence a -> Equivalence a Исходный код

mconcat :: [Equivalence a] -> Equivalence a Исходный код

Semigroup (Equivalence a) Исходный код

(<>) для эквивалентностей использует логическое И (&&) по результатам. Без newtypes это равно liftA2 (liftA2 (&&)).

(<>) :: Equivalence a -> Equivalence a -> Equivalence a
Equivalence equiv <> Equivalence equiv' = Equivalence a b ->
  equiv a b && equiv' a b
Подробности примера

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

Методы

(<>) :: Equivalence a -> Equivalence a -> Equivalence a Исходный код

sconcat :: NonEmpty (Equivalence a) -> Equivalence a Исходный код

stimes :: Integral b => b -> Equivalence a -> Equivalence a Исходный код

defaultEquivalence :: Eq a => Equivalence a Исходный код

Проверка эквивалентности с ==.

Примечание: Примеры для Double и Float нарушают рефлексивность для NaN.

comparisonEquivalence :: Comparison a -> Equivalence a Исходный код

Двойные стрелки

newtype Op a b Исходный код

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

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

Op

Поля

  • getOp :: b -> a
Примеры использования
Подробности примеров
Категория Op Исходный код
Подробности примера

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

Методы

id :: Op a a Исходный код

(.) :: Op b c -> Op a b -> Op a c Исходный код

Контравариантный (Op a) Исходный код
Подробности примера

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

Методы

contramap :: (a' -> a0) -> Op a a0 -> Op a a' Исходный код

(>$) :: b -> Op a b -> Op a a0 Исходный код

Моноид a => Моноид (Op a b) Исходный код

mempty @(Op a b) без новых типов mempty @(b->a) = _ -> mempty.

mempty :: Op a b
mempty = Op _ -> mempty
Подробности примера

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

Методы

mempty :: Op a b Исходный код

mappend :: Op a b -> Op a b -> Op a b Исходный код

mconcat :: [Op a b] -> Op a b Исходный код

Полугруппа a => Полугруппа (Op a b) Исходный код

(<>) @(Op a b) без новых типов (<>) @(b->a) = liftA2 (<>). Это поднимает операцию Semigroup (<>) над результатом a.

(<>) :: Op a b -> Op a b -> Op a b
Op f <> Op g = Op a -> f a <> g a
Подробности примера

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

Методы

(<>) :: Op a b -> Op a b -> Op a b Исходный код

sconcat :: Непустой список (Op a b) -> Op a b Исходный код

stimes :: Целочисленный b0 => b0 -> Op a b -> Op a b Исходный код

Число с плавающей точкой a => Число с плавающей точкой (Op a b) Исходный код
Instance details

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

Num a => Num (Op a b) Source
Сведения об экземпляре

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

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 Исходный код

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Data-Functor-Contravariant.html

Spec-Zone.ru

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