Data.Functor.Contravariant.Rep

adjunctions-4.4.2: Adjunctions and representable functors

Copyright | (c) Edward Kmett 2011-2014
License | BSD3
Maintainer | ekmett@gmail.com
Stability | experimental
Safe Haskell | None
Language | Haskell2010

Data.Functor.Contravariant.Rep

Contents

- Representable Contravariant Functors
- Default definitions

Description

Representable contravariant endofunctors over the category of Haskell types are isomorphic to `(_ -> r)` and resemble mappings to a fixed range.

Synopsis

- class Contravariant f => Representable (f :: Type -> Type) where
  - type Rep (f :: Type -> Type)
  - tabulate :: (a -> Rep f) -> f a
  - index :: f a -> a -> Rep f
  - contramapWithRep :: (b -> Either a (Rep f)) -> f a -> f b
- 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 :: Type -> Type) where #

A `Contravariant` functor `f` is `Representable` if `tabulate` and `index` witness an isomorphism to `(_ -> Rep f)`.

    tabulate . index ≡ id
    index . tabulate ≡ id

Minimal complete definition

tabulate, index

Associated Types

type Rep (f :: Type -> Type) #

Methods

tabulate :: (a -> Rep f) -> f a #

    contramap f (tabulate g) = tabulate (g . f)

index :: f a -> a -> Rep f #

contramapWithRep :: (b -> Either a (Rep f)) -> f a -> f b #

    contramapWithRep f p ≡ tabulate $ either (index p) id . f

#### Instances

Instances details

Representable Predicate # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep Predicate |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep Predicate = Bool
Methods tabulate :: (a -> Rep Predicate) -> Predicate a # index :: Predicate a -> a -> Rep Predicate # contramapWithRep :: (b -> Either a (Rep Predicate)) -> Predicate a -> Predicate b #
Representable (Op r) # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep (Op r) |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep (Op r) = r
Methods tabulate :: (a -> Rep (Op r)) -> Op r a # index :: Op r a -> a -> Rep (Op r) # contramapWithRep :: (b -> Either a (Rep (Op r))) -> Op r a -> Op r b #
Representable (Proxy :: Type -> Type) # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep (Proxy :: Type -> Type) |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep (Proxy :: Type -> Type) = ()
Methods tabulate :: (a -> Rep (Proxy :: Type -> Type)) -> Proxy a # index :: Proxy a -> a -> Rep (Proxy :: Type -> Type) # contramapWithRep :: (b -> Either a (Rep (Proxy :: Type -> Type))) -> Proxy a -> Proxy b #
Representable (U1 :: Type -> Type) # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep (U1 :: Type -> Type) |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep (U1 :: Type -> Type) = ()
Methods tabulate :: (a -> Rep (U1 :: Type -> Type)) -> U1 a # index :: U1 a -> a -> Rep (U1 :: Type -> Type) # contramapWithRep :: (b -> Either a (Rep (U1 :: Type -> Type))) -> U1 a -> U1 b #
(Representable f, Representable g) => Representable (Product f g) # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep (Product f g) |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep (Product f g) = (Rep f, Rep g)
Methods tabulate :: (a -> Rep (Product f g)) -> Product f g a # index :: Product f g a -> a -> Rep (Product f g) # contramapWithRep :: (b -> Either a (Rep (Product f g))) -> Product f g a -> Product f g b #
(Representable f, Representable g) => Representable (f :*: g) # |
Instance details Defined in Data.Functor.Contravariant.Rep Associated Types
type Rep (f :*: g) |
Instance details Defined in Data.Functor.Contravariant.Rep type Rep (f :*: g) = (Rep f, Rep g)
Methods tabulate :: (a -> Rep (f :*: g)) -> (f :*: g) a # index :: (f :*: g) a -> a -> Rep (f :*: g) # contramapWithRep :: (b -> Either a (Rep (f :*: g))) -> (f :*: g) a -> (f :*: g) b #

tabulated :: (Representable f, Representable g, Profunctor p, Functor h) => p (f a) (h (g b)) -> p (a -> Rep f) (h (b -> Rep g)) #

`tabulate` and `index` form two halves of an isomorphism.

This can be used with the combinators from the `lens` package.

    tabulated :: Representable f => Iso' (a -> Rep f) (f a)

# Default definitions

contramapRep :: Representable f => (a -> b) -> f b -> f a #