Portability | portable |
---|---|
Stability | provisional |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Contravariant
functors, sometimes referred to colloquially as Cofunctor
,
even though the dual of a Functor
is just a Functor
. As with Functor
the definition of Contravariant'
for a given ADT is unambiguous.
- class Contravariant f where
- contramap :: (a -> b) -> f b -> f a
- newtype Predicate a = Predicate {
- getPredicate :: a -> Bool
- newtype Comparison a = Comparison {
- getComparison :: a -> a -> Ordering
- defaultComparison :: Ord a => Comparison a
- newtype Equivalence a = Equivalence {
- getEquivalence :: a -> a -> Bool
- defaultEquivalence :: Eq a => Equivalence a
Contravariant Functors
class Contravariant f whereSource
Any instance should be subject to the following laws:
contramap id = id contramap f . contramap g = contramap (g . f)
Note, that the second law follows from the free theorem of the type of
contramap
and the first law, so you
need only check that the former condition holds.
Contravariant Equivalence | Equivalence relations are |
Contravariant Comparison | A |
Contravariant Predicate | A |
Predicates
Predicate | |
|
Contravariant Predicate | A |
Comparisons
newtype Comparison a Source
Defines a total ordering on a type as per compare
Comparison | |
|
Contravariant Comparison | A |
defaultComparison :: Ord a => Comparison aSource
Compare using compare
Equivalence Relations
newtype Equivalence a Source
Define an equivalence relation
Equivalence | |
|
Contravariant Equivalence | Equivalence relations are |
defaultEquivalence :: Eq a => Equivalence aSource
Check for equivalence with ==