在Haskell中,我们使用术语“section”来表示在中缀位置使用的部分应用函数。例如,对于函数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
但是,在类别理论中,g
的{{1}}部分被定义为f
的右反(因此f
)。
我没有看到两个定义之间有明显的联系。例如,f . g == id
显然不是s1
的倒数,至少不是 Hask 。我认为foo
甚至不必 Hask 中的反转。
类别理论定义是否是Haskell定义的来源,如果是,如何?
答案 0 :(得分:21)
正如评论中指出的那样,Haskell得到了Miranda(和Orwell)的部分。大卫特纳说他从理查德伯德和大卫威尔那里得到了这个想法。
我刚刚和Richard Bird聊过。他说他不记得这个名字的来源,但他认为是David Wile创造的。不幸的是,David Wile去年去世了,所以我们可能永远不会知道。但是,理查德确实承认他是说服大卫特纳和菲尔瓦德勒在他们的语言中添加部分的人。
这里是Wile的论文页面,这是第一次提到"部分"。 http://imgur.com/a/cQDlu
答案 1 :(得分:2)
可能来自"阵列部分"操作,主要用于Fortran,特别是用于柱或行提取。这是有道理的,如果你考虑从双参数函数制作查找表。 https://www.phy.ornl.gov/csep/pl/node16.html