這是Inconsistent Eq and Ord instances?的後續問題。Haskell:標準庫假定Eq和Ord是兼容的嗎?
問題有本質上是:宣佈Eq
和Ord
實例的類型時,必須確保compare x y
回報EQ
當且僅當x == y
回報True
?創建破壞這個假設的實例是危險的嗎?這似乎是一個人們可以假設的自然法則,但似乎並沒有在前奏中明確說明,單子或函子法則。
基本的回答是:這樣做有點危險,因爲圖書館可能會認爲這個定律是成立的。
我的問題現在是:做任何標準庫(特別是Set
或Map
)做出這個假設?只要我只依賴GHC提供的標準庫,選擇不兼容的類型Eq
和Ord
會危險嗎?(如果大問題仍然可以接受,我會問:哪些常用圖書館會採用此法律?)
編輯。我的用例與原始問題類似。我有一個自定義實例Eq
,我用了很多。我想要Ord
的唯一原因是我可以使用它作爲Map
的域;我不關心具體的順序,也不會在代碼中明確地使用它。所以如果我可以使用Ord
的派生實例,那麼我的生活將會更容易,我的代碼更清晰。
「,這通常用過的圖書館承擔這個法則「---人的大腦? –
事實上,一個更好的問題是,對於一個(未調整的)例子,其中'(a == b)/ =(比較b == EQ)'是有意義的。 – Ingo
這只是閒暇的好奇心,還是你有一個用例記住你認爲有意義讓兩者有所不同?如果是後者,我很樂意看到它出現(嚴重的是,我現在很好奇,並且自己也想不到一個好的用例......) – jamshidh