2016-11-10 26 views
12

在Haskell中,我們使用術語「部分」來表示在中綴位置中使用的部分應用函數。例如,對於一個功能foo :: a -> b -> c和值x :: ay :: b,我們有兩節名稱「部分」來自部分應用的中綴操作符的位置?

s1 = (x `foo`) :: b -> c == \b -> foo x b 

s2 = (`foo` y) :: a -> c == \a -> foo a y 

範疇論,然而,部分的fg被定義爲右逆的f(所以f . g == id)。

我沒有看到兩個定義之間的明顯聯繫。例如,s1顯然不是foo的倒數,至少不是哈希。我想s1甚至沒有倒數哈斯

類別理論定義是Haskell定義的來源,如果是這樣,如何?

+5

我的猜測是兩者完全無關。我把「部分」解釋爲:你拿'(x + y)',砍掉它的一部分(拿一個「部分」),並考慮剩下的部分。 – chi

+1

雖然這很平淡無奇。 – chepner

+5

我不知道,但我會盡力找出答案。 – augustss

回答

20

正如評論中指出的那樣,Haskell從Miranda(和Orwell)那裏得到了部分內容。大衛特納說他從Richard Bird和David Wile那裏得到了這個想法。

我剛剛和Richard Bird聊過。他說他不記得名字來自哪裏,但他認爲這是創造它的David Wile。不幸的是,David Wile去年去世了,所以我們可能永遠都不會知道。但是,理查德確實承認他是說服大衛特納和菲爾瓦德勒用他們的語言添加部分的人。

這是Wile的論文中的第一個提到「部分」的頁面。 http://imgur.com/a/cQDlu

+0

感謝您的檢查。我從來沒有想過這麼多,但其他很多東西都是以類別理論爲基礎的,這似乎也是可能的。 – chepner