Data.Functor.Rep

Description

Synopsis

# Representable Functors

class Distributive f => Representable f where #

A Functor f is Representable if tabulate and index witness an isomorphism to (->) x.

Every Distributive Functor is actually Representable.

Every Representable Functor from Hask to Hask is a right adjoint.

tabulate . index  ≡ id
index . tabulate  ≡ id
tabulate . return ≡ return


Minimal complete definition

Associated Types

type Rep f :: * #

Methods

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

fmap f . tabulate ≡ tabulate . fmap f


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

Instances

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

tabulate and index form two halves of an isomorphism.

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

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

# Wrapped representable functors

newtype Co f a #

Constructors

 Co FieldsunCo :: f a

Instances

 # Methodslower :: Comonad w => Co w a -> w a # (Representable f, (~) * (Rep f) a) => MonadReader a (Co f) # Methodsask :: Co f a #local :: (a -> a) -> Co f a -> Co f a #reader :: (a -> a) -> Co f a # Representable f => Monad (Co f) # Methods(>>=) :: Co f a -> (a -> Co f b) -> Co f b #(>>) :: Co f a -> Co f b -> Co f b #return :: a -> Co f a #fail :: String -> Co f a # Functor f => Functor (Co f) # Methodsfmap :: (a -> b) -> Co f a -> Co f b #(<\$) :: a -> Co f b -> Co f a # Representable f => Applicative (Co f) # Methodspure :: a -> Co f a #(<*>) :: Co f (a -> b) -> Co f a -> Co f b #(*>) :: Co f a -> Co f b -> Co f b #(<*) :: Co f a -> Co f b -> Co f a # (Representable f, Monoid (Rep f)) => Comonad (Co f) # Methodsextract :: Co f a -> a #duplicate :: Co f a -> Co f (Co f a) #extend :: (Co f a -> b) -> Co f a -> Co f b # Representable f => Distributive (Co f) # Methodsdistribute :: Functor f => f (Co f a) -> Co f (f a) #collect :: Functor f => (a -> Co f b) -> f a -> Co f (f b) #distributeM :: Monad m => m (Co f a) -> Co f (m a) #collectM :: Monad m => (a -> Co f b) -> m a -> Co f (m b) # Representable f => Apply (Co f) # Methods(<.>) :: Co f (a -> b) -> Co f a -> Co f b #(.>) :: Co f a -> Co f b -> Co f b #(<.) :: Co f a -> Co f b -> Co f a # Representable f => Bind (Co f) # Methods(>>-) :: Co f a -> (a -> Co f b) -> Co f b #join :: Co f (Co f a) -> Co f a # (Representable f, Semigroup (Rep f)) => Extend (Co f) # Methodsduplicated :: Co f a -> Co f (Co f a) #extended :: (Co f a -> b) -> Co f a -> Co f b # Representable f => Representable (Co f) # Associated Typestype Rep (Co f :: * -> *) :: * # Methodstabulate :: (Rep (Co f) -> a) -> Co f a #index :: Co f a -> Rep (Co f) -> a # type Rep (Co f) # type Rep (Co f) = Rep f

# Default definitions

## Functor

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

## Distributive

distributeRep :: (Representable f, Functor w) => w (f a) -> f (w a) #

## Apply/Applicative

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

pureRep :: Representable f => a -> f a #

liftR2 :: Representable f => (a -> b -> c) -> f a -> f b -> f c #

liftR3 :: Representable f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d #

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

mfixRep :: Representable f => (a -> f a) -> f a #

mzipRep :: Representable f => f a -> f b -> f (a, b) #

mzipWithRep :: Representable f => (a -> b -> c) -> f a -> f b -> f c #

askRep :: Representable f => f (Rep f) #

localRep :: Representable f => (Rep f -> Rep f) -> f a -> f a #

## Extend

duplicatedRep :: (Representable f, Semigroup (Rep f)) => f a -> f (f a) #

extendedRep :: (Representable f, Semigroup (Rep f)) => (f a -> b) -> f a -> f b #

duplicateRep :: (Representable f, Monoid (Rep f)) => f a -> f (f a) #

extendRep :: (Representable f, Monoid (Rep f)) => (f a -> b) -> f a -> f b #

extractRep :: (Representable f, Monoid (Rep f)) => f a -> a #