Существует ли стандартное имя для конструктора типов F :: * → * → * → *
с операциями
return :: x -> F a a x
bind :: F a b x -> (x -> F b c y) -> F a c y
это контравариантный функтор в первом аргументе и ковариантный функтор во втором и третьем? В частности, соответствует ли это какой-либо конструкции в теории категорий?
Операции приводят к
join :: F a b (F b c x) -> F a c x
что делает это похоже на какую-то "категорию в категории эндофенторов", но я не уверен, как это можно было бы формализовать.
EDIT: Как указывает ци, это связано с индексированной монадой: с учетом индексированной монады
F' : (* -> *) -> (* -> *)
мы можем использовать конструкцию Atkey
data (:=) :: * -> * -> * -> *
V :: x -> (x := a) a
и затем определите
F a b x = F' (x := b) a
чтобы получить желаемую монаду. Я проделал строительство в Агда, чтобы проверить. Я все равно хотел бы знать, известна ли эта более ограниченная структура.