在 Haskell/类别理论中 List Int 和 List String 是同一个类别吗?

Are List Int and List String the same category in Haskell/Category theory?

List Int 和 List String 在 Haskell/Category 理论中是同一个类别吗?

  • 列表整数
  • 列表字符串

两者都是列表。

它们是否被视为同一类别?

谢谢。


不——或者更确切地说,亩。如果没有关于您想要的对象和箭头的更多详细信息,它们首先都不是一个类别。

您可能想到的是 Hask 类别,它将 Haskell 类型视为对象,将 Haskell 函数视为箭头。在这个类别中,[Int][String] 是不同的对象,它们之间没有(自然,在这个词的非技术意义上)同构。


除了每个类型都是 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]