| Copyright | (c) Edward Kmett 2011-2014 |
|---|---|
| License | BSD3 |
| Maintainer | ekmett@gmail.com |
| Stability | experimental |
| Safe Haskell | None |
| Language | Haskell98 |
Data.Functor.Contravariant.Rep
Description
Representable contravariant endofunctors over the category of Haskell
types are isomorphic to (_ -> r) and resemble mappings to a
fixed range.
- class Contravariant f => Representable f where
- tabulated :: (Representable f, Representable g, Profunctor p, Functor h) => p (f a) (h (g b)) -> p (a -> Rep f) (h (b -> Rep g))
- contramapRep :: Representable f => (a -> b) -> f b -> f a
Representable Contravariant Functors
class Contravariant f => Representable f where Source
A Contravariant functor f is Representable if tabulate and index witness an isomorphism to (_ -> Rep f).
tabulate.index≡ idindex.tabulate≡ id
Methods
tabulate :: (a -> Rep f) -> f a Source
index :: f a -> a -> Rep f Source
contramapWithRep :: (b -> Either a (Rep f)) -> f a -> f b Source
contramapWithRepf p ≡tabulate$either(indexp)id. f
Instances
| Representable Predicate | |
| Representable (Proxy *) | |
| Representable (Op r) | |
| (Representable f, Representable g) => Representable (Product f g) |
tabulated :: (Representable f, Representable g, Profunctor p, Functor h) => p (f a) (h (g b)) -> p (a -> Rep f) (h (b -> Rep g)) Source
tabulate and index form two halves of an isomorphism.
This can be used with the combinators from the lens package.
tabulated::Representablef =>Iso'(a ->Repf) (f a)
Default definitions
contramapRep :: Representable f => (a -> b) -> f b -> f a Source