Haskell 既是类别又是单子的类型构造函数的名称?
类型构造函数Haskell 既是类别又是单子的类型构造函数的名称?,haskell,agda,category-theory,Haskell,Agda,Category Theory,类型构造函数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 使它看起来像某种“内函子范畴中的范畴”的操作,但我不确定如何将其形式化
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
使它看起来像某种“内函子范畴中的范畴”的操作,但我不确定如何将其形式化
编辑:正如chi指出的,这与索引单子相关:给定一个索引单子
F' : (* -> *) -> (* -> *)
我们可以使用Atkey结构
data (:=) :: * -> * -> * -> *
V :: x -> (x := a) a
然后定义
F a b x = F' (x := b) a
得到我们想要的单子。不过,我还是想知道这个更为有限的结构是否为人所知。正如评论中所指出的,这是罗伯特·阿特基在他的论文中提出的参数化单子的概念。这对应于范畴理论中丰富了内函子范畴的范畴概念 对于一个类别
C
是指对于C
的每个对象X
,Y
,Hom对象Hom(X,Y)
是V
的对象,并且存在给予身份和组成的态射,I->Hom(X,X)
和Hom(Y,Z)xHOM(X,Y)->Hom(X,Y)
。某些idenity和associativity条件必须保持,对应于类别的恒等式和associativity的通常要求
C
上的monadM
可以看作是一个单对象范畴,它丰富了C
上的内函子。由于只有一个对象X
,因此还有一个Hom对象Hom(X,X)
,即M
。返回操作产生一个恒等态射,一个自然变换I->M
,连接操作产生一个复合态射,一个自然变换mxm->M
。然后,恒等式和结合性条件与单子的条件完全对应
在
C
上,参数取自某个集合S
的参数化单子M
可以被视为一个类别,其S
元素作为对象,丰富了C
的内函子。Hom对象Hom(X,Y)
是mxy
,问题中描述的返回
和连接
操作再次产生所需的态射族 它看起来类似于一个索引单子,但不完全相同(?)哦,是的,很好的一点,这里有一个联系。我仍然称它为(,不是)索引单子的特例,它只是在索引中有一些额外的性质。例如,索引状态monad符合这种模式。(罗伯特·阿特基(Robert Atkey)在我链接的论文中介绍了这些,因此麦克布莱德对“at key”类型的双关语命名为:=
)@BenjaminHodgson谢谢,这正是我想要的!如果你把它作为答案贴出来,我会接受的。(罗伯特·阿特基甚至预见到了一个问题,我想我会遇到他的张量积要求。)