我想學習Haskell的指導學習你一個Haskell,但以下困惑我。Haskell函數模式匹配
lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"
lucky x = "Sorry, you're out of luck, pal!"
正如你所看到的,這裏有一行說明函數的確切類型。但這是必要的嗎?參數和返回值的類型不能從該行下面的模式中推導出來嗎?
我想學習Haskell的指導學習你一個Haskell,但以下困惑我。Haskell函數模式匹配
lucky :: (Integral a) => a -> String
lucky 7 = "LUCKY NUMBER SEVEN!"
lucky x = "Sorry, you're out of luck, pal!"
正如你所看到的,這裏有一行說明函數的確切類型。但這是必要的嗎?參數和返回值的類型不能從該行下面的模式中推導出來嗎?
你是對的,他們絕對沒有必要。然而,至少有兩個原因說明函數的類型是非常普遍的做法:至少有兩個原因:
這就是爲什麼,雖然它們是可選的,但頂級函數的類型幾乎總是在Haskell代碼中拼寫出來。
要完成Zeta所說的,在這種情況下沒有必要。但是,在某些情況下,當代碼過於模糊而無法推斷時,有必要指定函數的類型。
相關:https://stackoverflow.com/questions/27067905/when-are-type-signatures-necessary-in-haskell – Zeta