我是Haskell的新手,正在努力學習類型類是如何工作的。 我在GHCi編譯器中輸入了下面的代碼。Haskell類型類
let (+) :: Num a => a -> a -> a;
(+) a b = a+b;
該代碼編譯,但每當我調用該函數,它卡住了,我必須按Ctrl + C來停止進程。
我在這裏做錯了什麼嗎? 提前謝謝!
我是Haskell的新手,正在努力學習類型類是如何工作的。 我在GHCi編譯器中輸入了下面的代碼。Haskell類型類
let (+) :: Num a => a -> a -> a;
(+) a b = a+b;
該代碼編譯,但每當我調用該函數,它卡住了,我必須按Ctrl + C來停止進程。
我在這裏做錯了什麼嗎? 提前謝謝!
您從功能+
遞歸調用你的函數+
,這是一樣的,如果你寫:
add :: Num a => a -> a -> a
add a b = add a b
您已經定義a + b
等於a + b
(在+
綴運營商也可以寫成作爲(+)
,在這種情況下,它表現爲普通的前綴函數;但左手邊仍然是右手邊的東西)。
所以解釋只是永遠旋轉,以評估a + b
它,然後需要評估a + b
,然後需要的a + b
的評估,等等。
謝謝你的答案,但它肯定是一個問題。但我也試過'let(+++):: Num a => a - > a - > a; (+++)a b = a + b'也沒用。這裏似乎是什麼問題。 – user3377437
因爲你的'+'中仍然有一個無限循環,所以很有可能。你重新開始了GHCi會議嗎? –
有你!是的,這是問題所在。我重新啓動GHCi,它工作!由於這兩個答案都有幫助,所以我投票選出了誰先回答。我很欣賞你的答案。 – user3377437