上下文:我不到一個星期的時間就把哈斯克爾搞清楚了,我很享受我自己,但是這個讓我很難過。這似乎是最簡單的例子,證明我的問題:Haskell的新品牌,爲什麼這個函數會永久循環?
我有以下類型定義。
data AnInteger = A Integer
instance Eq AnInteger where
a == a' = a == a'
但是當我嘗試使用它
我得到什麼似乎是一個無限循環。這裏發生了什麼,我沒有得到?
如何更正語法以提供所需的輸出真?
上下文:我不到一個星期的時間就把哈斯克爾搞清楚了,我很享受我自己,但是這個讓我很難過。這似乎是最簡單的例子,證明我的問題:Haskell的新品牌,爲什麼這個函數會永久循環?
我有以下類型定義。
data AnInteger = A Integer
instance Eq AnInteger where
a == a' = a == a'
但是當我嘗試使用它
我得到什麼似乎是一個無限循環。這裏發生了什麼,我沒有得到?
如何更正語法以提供所需的輸出真?
你被說a
等於a'
當且僅當a
定義==
操作等於a'
。從邏輯上講,這是一種重言式。
就程序邏輯而言,它是一個無限循環,因爲將==
函數應用於兩個參數將無限地適用於那些相同的參數。
您可能打算做的是使用==
來比較包裝在AnInteger
中的整數,而不是AnInteger
本身。要做到這一點,你首先需要使用模式匹配來打開它們,像這樣:
(A a) == (A a') = a == a'
完美,謝謝! – Matt
這就像說'main = main'。您已經將平等定義爲對自身的遞歸調用。 – 4castle
將來,請發佈圖片文字,而不是圖片。大多數終端會以某種方式從它們上剪切和粘貼。包含文字的圖像在這裏就不贊成了。 – chi