为什么语言类型的类别有态度,而不是仿函数?
-
28-09-2020 - |
题
我可能没有留下这个问题,所以请忍受我,因为我试图解释我的意思。
我正在研究学习类别理论,适用于编程。到目前为止,我明白:
- 类别中的对象是“不间断的”;你不应该在他们内部看到他们的内部结构。
- 任何集合是一个类别
- 编程语言类型可以被认为是集。 (bool是set true,false; int是所有整数的集合;等等。) 因此,语言中的所有类型都形成了一类集合。
- 态态是物体之间的箭头。
- 如果这些对象本身是类别,那么态度被称为函数。
一起携带,这意味着从int到bool的函数是一个仿函数,因为它是从Set类别Int到Set类别Bool的地图。
但是,我还在别处阅读(特别是 https://www.johndcook.com/blog/2014/05/10/haskell-category-theory/ )那种方式是错误的,我们真的不应该谈论语言类型基本类别,“只是”态态。但我没有看到它如何与我以前的逻辑合作。我必须得出结论,我以前的逻辑是有缺陷的,但我不清楚如何或为什么。概念化这一点是什么?套装只是额外的特殊例外吗?或者真的只是一个任意偏好的偏好,如何查看问题空间?或者我只是在某个地方出错了?
解决方案
这里有几个想法漂浮在这里。您可以通过分类镜头查看编程语言,然后类型是对象,它们确实是不透明的。所以Bool在这张照片中不是一组真实和假。这是一个物体,有两个态度(注射)进入它,一个对应于真实的一个,一个是一个到假的。在Haskell,这些是Bool的两个构造函数。他们没有参数,但这被解释为来自终端物体的态度(单位类型)。这一切都很好地效果。
然后,存在更传统的图片,其中类型仅仅是值集,而态态是集合之间的功能。集和函数表格组成一个类别。只要你不谈论部分函数(永远循环),那张照片很长。然后有第三个想法,每个单独的集合都是一个类别。这是一个离散的类别,这意味着元素之间没有态度(除了身份之外)。在这种情况下,集合之间的功能确实对应于离散类别之间的函数。但是离散类别之间的仿函数只不过是对象(元素)的功能,这在态度上微不足道,因此这不是一个非常有趣的观点。
不隶属于 cs.stackexchange