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这应该是答案