Is there any standard name for a type constructor F :: * -> * -> * -> *
with operations
return :: x -> F a a x
bind :: F a b x -> (x -> F b c y) -> F a c y
that is a contravariant functor in the first argument and a covariant functor in the second and third? In particular, does this correspond to any kind construction in category theory?
The operations give rise to a
join :: F a b (F b c x) -> F a c x
operation that makes this seem like some kind of "category in the category of endofunctors", but I'm not sure how that could be formalised.
EDIT: As chi points out, this is related to the indexed monad: given an indexed monad
F' : (* -> *) -> (* -> *)
we can use the Atkey construction
data (:=) :: * -> * -> * -> *
V :: x -> (x := a) a
and then define
F a b x = F' (x := b) a
to get the kind of monad we want. I've done the construction in Agda to check. I'd still like to know whether this more limited structure is known, though.
As pointed out in the comments, this is the notion of a Parametrised Monad introduced by Robert Atkey in his Parametrised Notions of Computation paper. This corresponds to the notion of a category enriched over a category of endofunctors in category theory.
For a category C
to be enriched over a category V
with monoidal structure (I, x)
means that for every objects X
, Y
of C
, the Hom-object Hom(X, Y)
is an object of V
, and there exist morphisms that give the identity and composition, I -> Hom(X, X)
and Hom(Y, Z) x Hom(X, Y) -> Hom(X, Z)
. Certain idenity and associativity conditions must hold, corresponding to the usual requirements of identity and associativity for a category.
A monad M
on C
can be seen as a one-object category enriched over endofunctors on C
. Since there is only one object X
, there is also one Hom-object Hom(X, X)
, which is M
. The return operation gives rise to an identity morphism, a natural transformation I -> M
, and the join operation gives rise to a composition morphism, a natural transformation M x M -> M
. The identity and associativity conditions then correspond exactly to those of a monad.
A parametrised monad M
on C
with parameters taken from some set S
can be seen as a category with elements of S
as objects, enriched over the endofunctors of C
. The Hom-object Hom(X, Y)
is M X Y
and the return
and join
operations described in the question again give rise to the families of morphisms required.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With