2014-03-06 65 views
2

我是Haskell的新手,正在努力學習類型類是如何工作的。 我在GHCi編譯器中輸入了下面的代碼。Haskell類型類

let (+) :: Num a => a -> a -> a; 
(+) a b = a+b; 

該代碼編譯,但每當我調用該函數,它卡住了,我必須按Ctrl + C來停止進程。

我在這裏做錯了什麼嗎? 提前謝謝!

+0

謝謝你的答案,但它肯定是一個問題。但我也試過'let(+++):: Num a => a - > a - > a; (+++)a b = a + b'也沒用。這裏似乎是什麼問題。 – user3377437

+5

因爲你的'+'中仍然有一個無限循環,所以很有可能。你重新開始了GHCi會議嗎? –

+0

有你!是的,這是問題所在。我重新啓動GHCi,它工作!由於這兩個答案都有幫助,所以我投票選出了誰先回答。我很欣賞你的答案。 – user3377437

回答

7

您從功能+遞歸調用你的函數+,這是一樣的,如果你寫:

add :: Num a => a -> a -> a 
add a b = add a b 
8

您已經定義a + b等於a + b(在+綴運營商也可以寫成作爲(+),在這種情況下,它表現爲普通的前綴函數;但左手邊仍然是右手邊的東西)。

所以解釋只是永遠旋轉,以評估a + b它,然後需要評估a + b,然後需要的a + b的評估,等等。