Spec-Zone.ru › Haskell 9

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

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

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

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

Методы

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

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

Contravariant Equivalence Исходный код

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

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

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

Методы

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

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

Contravariant Predicate Исходный код

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

Без новых типов 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 Исходный код

Contravariant (Op a) Исходный код
Подробности экземпляра

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

Методы

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

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

Contravariant (Proxy :: Type -> Type) Исходный код
Подробности экземпляра

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

Методы

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

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

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

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

Методы

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

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

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

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

Методы

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

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

Contravariant (Const a :: Type -> Type) Исходный код
Подробности экземпляра

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

Методы

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

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

Contravariant f => Contravariant (Alt f) Исходный код
Подробности экземпляра

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

Методы

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

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

Contravariant f => Contravariant (Rec1 f) Исходный код
Подробности экземпляра

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

Методы

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

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

(Contravariant f, Contravariant g) => Contravariant (Product f g) Исходный код
Подробности экземпляра

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

Методы

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

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

(Contravariant f, Contravariant g) => Contravariant (Sum f g) Исходный код
Подробности экземпляра

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

Методы

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

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

(Contravariant f, Contravariant g) => Contravariant (f :*: g) Исходный код
Подробности экземпляра

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

Методы

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

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

(Contravariant f, Contravariant g) => Contravariant (f :+: g) Исходный код
Подробности экземпляра

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

Методы

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

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

Contravariant (K1 i c :: Type -> Type) Исходный код
Подробности экземпляра

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

Методы

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

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

(Functor f, Contravariant g) => Contravariant (Compose f g) Исходный код
Подробности экземпляра

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

Методы

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

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

(Functor f, Contravariant g) => Contravariant (f :.: g) Исходный код
Подробности экземпляра

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

Методы

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

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

Contravariant f => Contravariant (M1 i c f) Исходный код
Подробности экземпляра

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

Методы

contramap :: (a' -> a) -> M1 i c f a -> M1 i c f a' Исходный код

(>$) :: b -> M1 i c f b -> M1 i c f a Исходный код

phantom :: (Functor f, Contravariant f) => f a -> f b Исходный код

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

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

fmap      f ≡ phantom
contramap f ≡ phantom

Операторы

(>$<) :: Contravariant f => (a -> b) -> f b -> f a infixl 4 Исходный код

Это инфиксный псевдоним для contramap.

(>$$<) :: Contravariant f => f b -> (a -> b) -> f a infixl 4 Исходный код

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

($<) :: Contravariant f => f b -> b -> f a infixl 4 Исходный код

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

Предикаты

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

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

Predicate

Поля

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

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

Без новых типов 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. Без новых типов это эквивалентно 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) Исходный код

(<>) для предикатов использует логическую конъюнкцию (&&) результатов. Без новых типов это эквивалентно 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 Исходный код

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

Сведения об экземпляре

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

Методы

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

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

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

mempty для сравнений всегда возвращает EQ. Без новых типов это эквивалентно 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 Исходный код

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

(<>) для сравнений объединяет результаты с помощью (<>) @Ordering. Без новых типов это эквивалентно 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 :: Integral 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, поскольку функцию, переданную в contramap, можно применить к каждому входному значению отношения эквивалентности.

Сведения об экземпляре

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

Методы

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

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

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

mempty для отношений эквивалентности всегда возвращает True. Без новых типов это эквивалентно 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) Исходный код

(<>) для отношений эквивалентности использует логическую конъюнкцию (&&) результатов. Без новых типов это эквивалентно 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
Экземпляры
Сведения об экземплярах
Category Op Источник
Сведения об экземпляре

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

Методы

id :: Op a a Источник

(.) :: Op b c -> Op a b -> Op a c Источник

Contravariant (Op a) Источник
Сведения об экземпляре

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

Методы

contramap :: (a' -> a0) -> Op a a0 -> Op a a' Источник

(>$) :: b -> Op a b -> Op a a0 Источник

Monoid a => Monoid (Op a b) Источник

mempty @(Op a b) without newtypes is 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 Источник

Semigroup a => Semigroup (Op a b) Источник

(<>) @(Op a b) without newtypes is (<>) @(b->a) = liftA2 (<>). This lifts the Semigroup operation (<>) over the output of 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 :: NonEmpty (Op a b) -> Op a b Источник

stimes :: Integral b0 => b0 -> Op a b -> Op a b Источник

Floating a => Floating (Op a b) Источник
Сведения об экземпляре

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

Методы

pi :: Op a b Источник

exp :: Op a b -> Op a b Источник

log :: Op a b -> Op a b Источник

sqrt :: Op a b -> Op a b Источник

(**) :: Op a b -> Op a b -> Op a b Источник

logBase :: Op a b -> Op a b -> Op a b Источник

sin :: Op a b -> Op a b Источник

cos :: Op a b -> Op a b Источник

tan :: Op a b -> Op a b Источник

asin :: Op a b -> Op a b Источник

acos :: Op a b -> Op a b Источник

atan :: Op a b -> Op a b Источник

sinh :: Op a b -> Op a b Источник

cosh :: Op a b -> Op a b Источник

tanh :: Op a b -> Op a b Источник

asinh :: Op a b -> Op a b Источник

acosh :: Op a b -> Op a b Источник

atanh :: Op a b -> Op a b Источник

log1p :: Op a b -> Op a b Источник

expm1 :: Op a b -> Op a b Источник

log1pexp :: Op a b -> Op a b Источник

log1mexp :: Op a b -> 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 Источник

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.14.1/docs/libraries/base-4.22.0.0-66f8/Data-Functor-Contravariant.html

Spec-Zone.ru

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