【发布时间】:2016-12-24 10:25:47
【问题描述】:
在 Haskell 中,我们使用术语“节”来表示用于中缀位置的部分应用函数。例如,对于函数foo :: a -> b -> c 和值x :: a 和y :: b,我们有两个部分
s1 = (x `foo`) :: b -> c == \b -> foo x b
和
s2 = (`foo` y) :: a -> c == \a -> foo a y
然而,在范畴论中,f 的部分g 被定义为f 的右逆(因此f . g == id)。
我认为这两个定义之间没有明显的联系。例如,s1 显然不是 foo 的倒数,至少在 Hask 中不是。我想s1 甚至不必有 Hask 中的逆。
类别理论定义是否是 Haskell 定义的来源,如果是,如何?
【问题讨论】:
-
我的猜测是两者完全不相关。我将“部分”解释为:您取
(x+y),切掉其中一部分(取“部分”),然后考虑剩下的部分。 -
不过如此……平淡无奇。
-
我不知道,但我会试着找出答案。
-
Miranda 语言有部分,由 David Turner 设计。 Miranda 强烈影响了 Haskell 的设计。
-
摘自 Miranda 手册,第 9 章:致谢:部分的想法归功于 Richard Bird(牛津大学编程研究小组)和 David Wile(南加州大学信息科学研究所)。 miranda.org.uk