Haskell 型別類通常帶有規律。例如,Monoid 預計的實體會觀察到x <> mempty = mempty <> x = x。
型別類規則通常用單等號 ( =) 而不是雙等號 ( ==) 撰寫。這表明型別類法律中使用的平等概念與 of 不同Eq(這是有道理的,因為Eq不是 的超類Monoid)
環顧四周,我找不到任何關于=in typeclass law 含義的權威說法。例如:
- Haskell 2010 報告中甚至沒有包含“法律”一詞
- 與其他 Haskell 用戶交談時,大多數人似乎認為這
=通常意味著擴展相等或替代,但從根本上說是依賴于背景關系的。沒有人為此宣告提供任何權威來源。 - Haskell wiki 上關于 monad 法則的文章指出這
=是擴展性的,但同樣未能提供來源,而且我無法找到任何聯系相關編輯作者的方式。
那么問題=來了:在型別類法律的語意上是否有任何權威來源或標準?如果是這樣,它是什么?此外,是否有一些例子表明 的預期含義=特別奇特?
(作為旁注,=外延處理可能會變得棘手。例如,有一個Monoid (IO a)實體,但并不清楚IO值的外延相等是什么樣的。)
uj5u.com熱心網友回復:
我懷疑大多數人用=“道德平等”來表示“快速和松散的推理是道德上正確的”,你可以將其視為定義性的外延平等。
但這里沒有硬性規定。有很多圖書館,很多作者,如果你選擇任何兩位作者,他們可能有一些他們不同意的小細節=。
uj5u.com熱心網友回復:
型別類法則不是 Haskell 語言的一部分,因此它們不像語言本身那樣受到相同型別的語言理論語意分析。
相反,這些定律通常以非正式的數學符號表示。大多數演示文稿不需要更詳細的數學說明,因此它們不提供。
uj5u.com熱心網友回復:
我同意comingstorm的觀點,即這些定律中的平等是一種數學語言的平等。但我還要說這是對運營商的尊重==。
為什么?因為==應該實作數學相等。
例如,看分數(有理數)。它們可以實作為具有某些規則的整數對。該對(a, b)代表分數a/b。如果 ,則對(a, b)和(c, d)表示相同的有理數a*d == b*c。然后說這兩對是等價的,我們討論等價關系。在數學中,我們讓有理數成為該等價下的對的等價類。在編程中,我們改為定義運算子==來判斷兩對是否等價,即它們是否代表相同的分數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434054.html
上一篇:如何定義型別安全的約束玫瑰樹
下一篇::~:和:~~:等式有什么區別?
