具有操作
的类型构造函数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
这使得它看起来像某种“endofunctors类别中的类别”,但我不确定如何将其正式化。
编辑:正如志所指出的,这与索引的monad有关:给定一个索引的monadF' : (* -> *) -> (* -> *)
我们可以使用Atkey构造
data (:=) :: * -> * -> * -> *
V :: x -> (x := a) a
然后定义
F a b x = F' (x := b) a
获得我们想要的那种monad。 I've done the construction in Agda to check.我仍然想知道这种更有限的结构是否已知。
答案 0 :(得分:0)
正如评论中所指出的,这是Robert Atkey在他的Parametrised Notions of Computation论文中引入的参数化Monad的概念。这对应于在类别理论中丰富于一类内导体的类别的概念。
对于C
类别,enriched over a category V
with monoidal structure (I, x)
表示对于X
的每个对象Y
,C
,Hom-object Hom(X, Y)
是V
的对象,并且存在赋予身份和构图的态射,I -> Hom(X, X)
和Hom(Y, Z) x Hom(X, Y) -> Hom(X, Z)
。某些同一性和相关性条件必须符合一个类别的身份和相关性的通常要求。
M
上的monad C
可以被视为C
上的endofunctors丰富的单对象类别。由于只有一个对象X
,因此还有一个Hom-object Hom(X, X)
,即M
。返回操作产生一个同一性态射,一个自然变换I -> M
,并且连接操作产生一个组合态射,一个自然变换M x M -> M
。然后,身份和相关性条件完全对应于monad的那些。
M
上的参数化monad C
参数取自某些集S
,可以看作是S
元素作为对象的类别,丰富了endofunctors C
。 Hom-object Hom(X, Y)
为M X Y
,问题中描述的return
和join
操作再次产生了所需的态射系列。