这个问题有一个很长的前奏,然后我才能真正问出来:)
假设类型 A 和 B 代表类别,那么函数
f :: B -> A
是两个范畴之间的态射。我们可以创建一个新类别,其中 A 和 B 作为对象,f 作为箭头,如下所示:
现在,让我们引入一个新的类别 C 和函数 g:
g :: C -> B -> A
我希望能够将 C 和 g 添加到我上面的类别中,但我不确定该怎么做。直观地说,我想要这样的东西:
但我以前从未在类别图中看到过类似的东西。为了使这个洁净,我可以引入一个虚拟箭头 g' 并构造一个像这样的 2 类:
但这似乎是一个迟钝的画面。(当然,我们可以使用我上面画的图片作为正确图片的简写。)而且,现在也不完全清楚 g 和 g' 到底是什么。g 不再是一个将类别 C 作为输入并返回态射 :: B -> A 的函数。相反,
g' :: (C -> C)
g :: (C -> C) -> (B -> A)
如果我们通过 g 身份,那么一切都会正常工作。但是如果我们给它传递一些其他函数,那么谁知道会发生什么?
所以我的问题是:n 类别中的 n 箭头真的是我们应该考虑具有 arity n 的函数的方式吗?还是有一些更简单的方法可以将此功能表示为我错过的标准类别?