Are List Int and List String the same category in Haskell/Category theory?
List Int 和 List String 在 Haskell/Category 理论中是同一个类别吗?
两者都是列表。
它们是否被视为同一类别?
谢谢。
不——或者更确切地说,亩。如果没有关于您想要的对象和箭头的更多详细信息,它们首先都不是一个类别。
您可能想到的是 Hask 类别,它将 Haskell 类型视为对象,将 Haskell 函数视为箭头。在这个类别中,[Int] 和 [String] 是不同的对象,它们之间没有(自然,在这个词的非技术意义上)同构。
- 谢谢。我同意 Int 和 String 是不同的对象。那么两者的 List 呢?我想继续阅读您的意见。
-
List 是一个类型构造函数,属于 * -> * 类。当你将它应用到 Int 或 String 时,你会得到另一种类型(类型为 *),它在正常使用中根本没有自己的名称。我们只是通过 List 对底层类型的操作来引用每个。
-
@bayesian-study 无论您使用符号 [Int] 还是 List Int,我的陈述都是相同的: List Int 和 List String 是不同的对象,它们之间没有明显的同构。
-
谢谢@chepner 丹尼尔瓦格纳
除了每个类型都是 Hask 中的一个对象(类型和函数的类别)之外,每个列表类型也可以被认为是一个不同的类别,因为它们是 monoids:
该类别包含一个虚拟对象;除了作为态射的终点之外,它不代表任何东西。
每个列表对应一个不同的态射。
恒等态射是空列表[]。
组合对应于列表连接(++)。例如:
[1] ° [2,3] == [1] ++ [2,3] == [1,2,3]
[2,3] ° [1] == [2,3] ++ [1] == [2,3,1]
[] ° [1] == [] ++ [1] == [1]
[1] ° [] == [1] ++ [] == [1]
-
#2中仍然有一个错字。 :)
-
谢谢你的另一个详细回答! @chpner 信息量很大。