2016-11-20 58 views
1

上下文:我不到一個星期的時間就把哈斯克爾搞清楚了,我很享受我自己,但是這個讓我很難過。這似乎是最簡單的例子,證明我的問題:Haskell的新品牌,爲什麼這個函數會永久循環?

我有以下類型定義。

data AnInteger = A Integer 
instance Eq AnInteger where 
    a == a' = a == a' 

但是當我嘗試使用它

Screenshot of ghci infinite looping

我得到什麼似乎是一個無限循環。這裏發生了什麼,我沒有得到?

如何更正語法以提供所需的輸出

+0

這就像說'main = main'。您已經將平等定義爲對自身的遞歸調用。 – 4castle

+2

將來,請發佈圖片文字,而不是圖片。大多數終端會以某種方式從它們上剪切和粘貼。包含文字的圖像在這裏就不贊成了。 – chi

回答

8

你被說a等於a'當且僅當a定義==操作等於a'。從邏輯上講,這是一種重言式。

就程序邏輯而言,它是一個無限循環,因爲將==函數應用於兩個參數將無限地適用於那些相同的參數。

您可能打算做的是使用==來比較包裝在AnInteger中的整數,而不是AnInteger本身。要做到這一點,你首先需要使用模式匹配來打開它們,像這樣:

(A a) == (A a') = a == a' 
+0

完美,謝謝! – Matt

相關問題