Portability | portable |
---|---|
Stability | provisional |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Safe Haskell | Safe |
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
- (>$<) :: Contravariant f => (a -> b) -> f b -> f a
- (>$$<) :: Contravariant f => f b -> (a -> 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
- newtype Op a b = Op {
- getOp :: b -> 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.
Operators
(>$<) :: Contravariant f => (a -> b) -> f b -> f aSource
(>$$<) :: Contravariant f => f b -> (a -> b) -> f aSource
Predicates
Predicate | |
|
Typeable1 Predicate | |
Contravariant Predicate | A |
Comparisons
newtype Comparison a Source
Defines a total ordering on a type as per compare
Comparison | |
|
Typeable1 Comparison | |
Contravariant Comparison | A |
defaultComparison :: Ord a => Comparison aSource
Compare using compare
Equivalence Relations
newtype Equivalence a Source
Define an equivalence relation
Equivalence | |
|
Typeable1 Equivalence | |
Contravariant Equivalence | Equivalence relations are |
defaultEquivalence :: Eq a => Equivalence aSource
Check for equivalence with ==