-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Kan extensions, the Yoneda lemma, and (co)density (co)monads
--
-- Kan extensions, the Yoneda lemma, and (co)density (co)monads
@package kan-extensions
@version 0.2
module Data.Functor.Yoneda.Contravariant
type Yoneda = YonedaT Identity
yoneda :: (b -> a) -> b -> Yoneda a
liftYoneda :: a -> Yoneda a
lowerYoneda :: Yoneda a -> a
liftYonedaT :: f a -> YonedaT f a
lowerYonedaT :: Functor f => YonedaT f a -> f a
lowerM :: Monad f => YonedaT f a -> f a
-- | The contravariant Yoneda lemma applied to a covariant functor
data YonedaT f a
YonedaT :: (b -> a) -> f b -> YonedaT f a
instance Adjunction f g => Adjunction (YonedaT f) (YonedaT g)
instance (Functor f, Ord (f a)) => Ord (YonedaT f a)
instance (Functor f, Eq (f a)) => Eq (YonedaT f a)
instance (Functor f, Read (f a)) => Read (YonedaT f a)
instance (Functor f, Show (f a)) => Show (YonedaT f a)
instance Distributive f => Distributive (YonedaT f)
instance TraversableWithKey1 f => TraversableWithKey1 (YonedaT f)
instance TraversableWithKey f => TraversableWithKey (YonedaT f)
instance Traversable1 f => Traversable1 (YonedaT f)
instance Traversable f => Traversable (YonedaT f)
instance FoldableWithKey1 f => FoldableWithKey1 (YonedaT f)
instance Foldable1 f => Foldable1 (YonedaT f)
instance FoldableWithKey f => FoldableWithKey (YonedaT f)
instance Foldable f => Foldable (YonedaT f)
instance ComonadTrans YonedaT
instance Comonad w => Comonad (YonedaT w)
instance Extend w => Extend (YonedaT w)
instance Representable f => Representable (YonedaT f)
instance (Functor f, Indexable f) => Indexable (YonedaT f)
instance MonadPlus f => MonadPlus (YonedaT f)
instance MonadFix f => MonadFix (YonedaT f)
instance MonadTrans YonedaT
instance Monad m => Monad (YonedaT m)
instance Bind m => Bind (YonedaT m)
instance Plus f => Plus (YonedaT f)
instance Alt f => Alt (YonedaT f)
instance Alternative f => Alternative (YonedaT f)
instance Applicative f => Applicative (YonedaT f)
instance Apply f => Apply (YonedaT f)
instance Keyed f => Keyed (YonedaT f)
instance Functor (YonedaT f)
module Data.Functor.Yoneda
type Yoneda = YonedaT Identity
yoneda :: (forall b. (a -> b) -> b) -> Yoneda a
runYoneda :: Yoneda a -> (a -> b) -> b
liftYoneda :: a -> Yoneda a
lowerYoneda :: Yoneda a -> a
newtype YonedaT f a
YonedaT :: (forall b. (a -> b) -> f b) -> YonedaT f a
runYonedaT :: YonedaT f a -> forall b. (a -> b) -> f b
liftYonedaT :: Functor f => f a -> YonedaT f a
lowerYonedaT :: YonedaT f a -> f a
maxF :: (Functor f, Ord (f a)) => YonedaT f a -> YonedaT f a -> YonedaT f a
minF :: (Functor f, Ord (f a)) => YonedaT f a -> YonedaT f a -> YonedaT f a
maxM :: (Monad m, Ord (m a)) => YonedaT m a -> YonedaT m a -> YonedaT m a
minM :: (Monad m, Ord (m a)) => YonedaT m a -> YonedaT m a -> YonedaT m a
instance ComonadTrans YonedaT
instance Comonad w => Comonad (YonedaT w)
instance Extend w => Extend (YonedaT w)
instance MonadTrans YonedaT
instance MonadPlus m => MonadPlus (YonedaT m)
instance MonadFix m => MonadFix (YonedaT m)
instance Monad m => Monad (YonedaT m)
instance Bind m => Bind (YonedaT m)
instance Alternative f => Alternative (YonedaT f)
instance Plus f => Plus (YonedaT f)
instance Alt f => Alt (YonedaT f)
instance Ord (f a) => Ord (YonedaT f a)
instance Eq (f a) => Eq (YonedaT f a)
instance (Functor f, Read (f a)) => Read (YonedaT f a)
instance Show (f a) => Show (YonedaT f a)
instance Adjunction f g => Adjunction (YonedaT f) (YonedaT g)
instance Representable g => Representable (YonedaT g)
instance Lookup f => Lookup (YonedaT f)
instance Indexable f => Indexable (YonedaT f)
instance Distributive f => Distributive (YonedaT f)
instance TraversableWithKey1 f => TraversableWithKey1 (YonedaT f)
instance Traversable1 f => Traversable1 (YonedaT f)
instance TraversableWithKey f => TraversableWithKey (YonedaT f)
instance Traversable f => Traversable (YonedaT f)
instance FoldableWithKey1 f => FoldableWithKey1 (YonedaT f)
instance FoldableWithKey f => FoldableWithKey (YonedaT f)
instance Foldable1 f => Foldable1 (YonedaT f)
instance Foldable f => Foldable (YonedaT f)
instance Applicative f => Applicative (YonedaT f)
instance Apply f => Apply (YonedaT f)
instance Keyed f => Keyed (YonedaT f)
instance Functor (YonedaT f)
module Data.Functor.KanExtension
newtype Ran g h a
Ran :: (forall b. (a -> g b) -> h b) -> Ran g h a
runRan :: Ran g h a -> forall b. (a -> g b) -> h b
-- | toRan and fromRan witness a higher kinded adjunction.
-- from (`'Compose'` g) to Ran g
toRan :: (Composition compose, Functor k) => (forall a. compose k g a -> h a) -> k b -> Ran g h b
fromRan :: Composition compose => (forall a. k a -> Ran g h a) -> compose k g b -> h b
composeRan :: Composition compose => Ran f (Ran g h) a -> Ran (compose f g) h a
decomposeRan :: (Composition compose, Functor f) => Ran (compose f g) h a -> Ran f (Ran g h) a
adjointToRan :: Adjunction f g => f a -> Ran g Identity a
ranToAdjoint :: Adjunction f g => Ran g Identity a -> f a
ranToComposedAdjoint :: (Composition compose, Adjunction f g) => Ran g h a -> compose h f a
composedAdjointToRan :: (Composition compose, Adjunction f g, Functor h) => compose h f a -> Ran g h a
data Lan g h a
Lan :: (g b -> a) -> h b -> Lan g h a
toLan :: (Composition compose, Functor f) => (forall a. h a -> compose f g a) -> Lan g h b -> f b
fromLan :: Composition compose => (forall a. Lan g h a -> f a) -> h b -> compose f g b
adjointToLan :: Adjunction f g => g a -> Lan f Identity a
lanToAdjoint :: Adjunction f g => Lan f Identity a -> g a
-- | lanToComposedAdjoint and composedAdjointToLan witness
-- the natural isomorphism between Lan f h and Compose h
-- g given f -| g
lanToComposedAdjoint :: (Composition compose, Functor h, Adjunction f g) => Lan f h a -> compose h g a
composedAdjointToLan :: Composition compose => Adjunction f g => compose h g a -> Lan f h a
-- | composeLan and decomposeLan witness the natural
-- isomorphism from Lan f (Lan g h) and Lan (f o g)
-- h
composeLan :: (Composition compose, Functor f) => Lan f (Lan g h) a -> Lan (compose f g) h a
decomposeLan :: Composition compose => Lan (compose f g) h a -> Lan f (Lan g h) a
instance Functor (Lan f g)
instance Functor (Ran g h)
module Control.Monad.Codensity
newtype CodensityT m a
CodensityT :: (forall b. (a -> m b) -> m b) -> CodensityT m a
runCodensityT :: CodensityT m a -> forall b. (a -> m b) -> m b
lowerCodensityT :: Monad m => CodensityT m a -> m a
codensityTToAdjunction :: Adjunction f g => CodensityT g a -> g (f a)
adjunctionToCodensityT :: Adjunction f g => g (f a) -> CodensityT g a
instance MonadTrans CodensityT
instance MonadIO m => MonadIO (CodensityT m)
instance Monad (CodensityT f)
instance Applicative (CodensityT f)
instance Apply (CodensityT f)
instance Functor (CodensityT k)
-- | The density comonad for a functor. aka the comonad generated by a
-- functor The ''density'' term dates back to Dubuc''s 1974 thesis. The
-- term ''monad genererated by a functor'' dates back to 1972 in
-- Street''s ''Formal Theory of Monads''.
module Control.Comonad.Density
data DensityT k a
DensityT :: (k b -> a) -> k b -> DensityT k a
-- | The natural isomorphism between a comonad w and the comonad generated
-- by w (forwards).
liftDensityT :: Comonad w => w a -> DensityT w a
densityTToAdjunction :: Adjunction f g => DensityT f a -> f (g a)
adjunctionToDensityT :: Adjunction f g => f (g a) -> DensityT f a
instance ComonadTrans DensityT
instance Comonad (DensityT f)
instance Extend (DensityT f)
instance Functor (DensityT f)