| Copyright | (C) 2011-2016 Edward Kmett |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | provisional |
| Portability | MPTCs, fundeps |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Data.Functor.Yoneda
Contents
Description
The covariant form of the Yoneda lemma states that f is naturally
isomorphic to Yoneda f.
This is described in a rather intuitive fashion by Dan Piponi in
Synopsis
- newtype Yoneda (f :: Type -> Type) a = Yoneda {
- runYoneda :: forall b. (a -> b) -> f b
- liftYoneda :: Functor f => f a -> Yoneda f a
- lowerYoneda :: Yoneda f a -> f a
- maxF :: forall (f :: Type -> Type) a. (Functor f, Ord (f a)) => Yoneda f a -> Yoneda f a -> Yoneda f a
- minF :: forall (f :: Type -> Type) a. (Functor f, Ord (f a)) => Yoneda f a -> Yoneda f a -> Yoneda f a
- maxM :: forall (m :: Type -> Type) a. (Monad m, Ord (m a)) => Yoneda m a -> Yoneda m a -> Yoneda m a
- minM :: forall (m :: Type -> Type) a. (Monad m, Ord (m a)) => Yoneda m a -> Yoneda m a -> Yoneda m a
- yonedaToRan :: forall (f :: Type -> Type) a. Yoneda f a -> Ran Identity f a
- ranToYoneda :: forall (f :: Type -> Type) a. Ran Identity f a -> Yoneda f a
Documentation
newtype Yoneda (f :: Type -> Type) a Source #
Yoneda f a can be viewed as the partial application of fmap to its second argument.
Instances
| ComonadTrans Yoneda Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| MonadTrans Yoneda Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| (Functor f, MonadFree f m) => MonadFree f (Yoneda m) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Representable g => Representable (Yoneda g) Source # | |||||
Defined in Data.Functor.Yoneda Associated Types
| |||||
| MonadFix m => MonadFix (Yoneda m) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Foldable f => Foldable (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda Methods fold :: Monoid m => Yoneda f m -> m foldMap :: Monoid m => (a -> m) -> Yoneda f a -> m foldMap' :: Monoid m => (a -> m) -> Yoneda f a -> m foldr :: (a -> b -> b) -> b -> Yoneda f a -> b foldr' :: (a -> b -> b) -> b -> Yoneda f a -> b foldl :: (b -> a -> b) -> b -> Yoneda f a -> b foldl' :: (b -> a -> b) -> b -> Yoneda f a -> b foldr1 :: (a -> a -> a) -> Yoneda f a -> a foldl1 :: (a -> a -> a) -> Yoneda f a -> a elem :: Eq a => a -> Yoneda f a -> Bool maximum :: Ord a => Yoneda f a -> a minimum :: Ord a => Yoneda f a -> a | |||||
| Foldable1 f => Foldable1 (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda Methods fold1 :: Semigroup m => Yoneda f m -> m foldMap1 :: Semigroup m => (a -> m) -> Yoneda f a -> m foldMap1' :: Semigroup m => (a -> m) -> Yoneda f a -> m toNonEmpty :: Yoneda f a -> NonEmpty a maximum :: Ord a => Yoneda f a -> a minimum :: Ord a => Yoneda f a -> a foldrMap1 :: (a -> b) -> (a -> b -> b) -> Yoneda f a -> b foldlMap1' :: (a -> b) -> (b -> a -> b) -> Yoneda f a -> b foldlMap1 :: (a -> b) -> (b -> a -> b) -> Yoneda f a -> b foldrMap1' :: (a -> b) -> (a -> b -> b) -> Yoneda f a -> b | |||||
| Eq1 f => Eq1 (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Ord1 f => Ord1 (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda Methods liftCompare :: (a -> b -> Ordering) -> Yoneda f a -> Yoneda f b -> Ordering | |||||
| (Read1 f, Functor f) => Read1 (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Yoneda f a) liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Yoneda f a] liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Yoneda f a) liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Yoneda f a] | |||||
| Show1 f => Show1 (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda Methods liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Yoneda f a -> ShowS liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Yoneda f a] -> ShowS | |||||
| Traversable f => Traversable (Yoneda f) Source # | |||||
| Alternative f => Alternative (Yoneda f) Source # | |||||
| Applicative f => Applicative (Yoneda f) Source # | |||||
| Functor (Yoneda f) Source # | |||||
| Monad m => Monad (Yoneda m) Source # | |||||
| MonadPlus m => MonadPlus (Yoneda m) Source # | |||||
| Comonad w => Comonad (Yoneda w) Source # | |||||
| Distributive f => Distributive (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Alt f => Alt (Yoneda f) Source # | |||||
| Apply f => Apply (Yoneda f) Source # | |||||
| Bind m => Bind (Yoneda m) Source # | |||||
| Extend w => Extend (Yoneda w) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Plus f => Plus (Yoneda f) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Traversable1 f => Traversable1 (Yoneda f) Source # | |||||
| Adjunction f g => Adjunction (Yoneda f) (Yoneda g) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| (Functor f, Read (f a)) => Read (Yoneda f a) Source # | |||||
Defined in Data.Functor.Yoneda | |||||
| Show (f a) => Show (Yoneda f a) Source # | |||||
| (Eq1 f, Eq a) => Eq (Yoneda f a) Source # | |||||
| (Ord1 f, Ord a) => Ord (Yoneda f a) Source # | |||||
| type Rep (Yoneda g) Source # | |||||
Defined in Data.Functor.Yoneda type Rep (Yoneda g) = Rep g | |||||
liftYoneda :: Functor f => f a -> Yoneda f a Source #
The natural isomorphism between f and given by the Yoneda lemma
is witnessed by Yoneda fliftYoneda and lowerYoneda
liftYoneda.lowerYoneda≡idlowerYoneda.liftYoneda≡id
lowerYoneda (liftYoneda fa) = -- definition lowerYoneda (Yoneda (f -> fmap f a)) -- definition (f -> fmap f fa) id -- beta reduction fmap id fa -- functor law fa
lift=liftYoneda
lowerYoneda :: Yoneda f a -> f a Source #
maxF :: forall (f :: Type -> Type) a. (Functor f, Ord (f a)) => Yoneda f a -> Yoneda f a -> Yoneda f a Source #
minF :: forall (f :: Type -> Type) a. (Functor f, Ord (f a)) => Yoneda f a -> Yoneda f a -> Yoneda f a Source #
maxM :: forall (m :: Type -> Type) a. (Monad m, Ord (m a)) => Yoneda m a -> Yoneda m a -> Yoneda m a Source #
minM :: forall (m :: Type -> Type) a. (Monad m, Ord (m a)) => Yoneda m a -> Yoneda m a -> Yoneda m a Source #
as a right Kan extension
yonedaToRan :: forall (f :: Type -> Type) a. Yoneda f a -> Ran Identity f a Source #
Yoneda f can be viewed as the right Kan extension of f along the Identity functor.
yonedaToRan.ranToYoneda≡idranToYoneda.yonedaToRan≡id
ranToYoneda :: forall (f :: Type -> Type) a. Ran Identity f a -> Yoneda f a Source #