Haskell 类别中仅包含布尔单位和空值的所有箭头

Haskell 类别中仅包含布尔单位和空值的所有箭头,haskell,functional-programming,category-theory,purely-functional,Haskell,Functional Programming,Category Theory,Purely Functional,这实际上是对程序员类别理论的挑战,这个问题是以下问题的后续: 绘制一幅类别的图片,其唯一对象是类型Void、()(单位)和Bool;箭头对应于这些类型之间所有可能的函数。用函数的名称标记箭头 这是连接这三个对象/类型的箭头/函数列表,我更确定: true=const true::()->Bool false=const false::()->Bool ignore=const()::Bool->() 荒谬的::Void->() 荒谬的::Void->Bool id::()->() id::V

这实际上是对程序员类别理论的挑战,这个问题是以下问题的后续:

绘制一幅类别的图片,其唯一对象是类型
Void
()
(单位)和
Bool
;箭头对应于这些类型之间所有可能的函数。用函数的名称标记箭头

这是连接这三个对象/类型的箭头/函数列表,我更确定:

  • true=const true::()->Bool
  • false=const false::()->Bool
  • ignore=const()::Bool->()
  • 荒谬的::Void->()
  • 荒谬的::Void->Bool
  • id::()->()
  • id::Void->Void
    必须存在,因为我们谈论的是一个类别,对吗
  • 因为它是一个初始对象,所以其他两个对象中没有任何内容是无效的,对吗

这是正确的答案吗?

听起来不错。(顺便说一句,
id::Void->Void
相同。)注意,一般来说,可以对初始对象进行变形。调用了不能(至少是同构)的初始对象,这是
Void
的情况。我实际上刚刚添加了
id::()->()
,我忘记了。在集合论中(通常当Haskell类型被视为忽略底部元素的集合时),类型为
A->B
的函数数量相当于
|B | ^ A |
,请记住
0^0=1
。这是了解任意两个集合之间有多少个函数的好方法。您的列表如下所示,并且是正确的:
| Void |=0
| Unit |=1
,以及
| Bool |=2
@alias这应该是答案