譁眾取寵

在 Haskell 中,所有函式都被認為是 curry:即 Haskell 中的所有函式只接受一個引數。

我們來看看 div 的功能:

div::Int -> Int -> Int

如果我們用 6 和 2 呼叫這個函式,我們不出所料得到 3:

Prelude> div 6 2
3

但是,這並不像我們想象的那樣。首先評估 div 6返回 Int -> Int 型別的函式。然後將得到的函式應用於值 2,其產生 3。

當我們看一個函式的型別簽名時,我們可以將我們的思維從“取兩個型別 Int 的引數”改為“取一個 Int 並返回一個接受 Int 的函式”。如果我們認為型別符號中的箭頭與右側相關聯*,*則重申這一點,因此實際上可以讀取 div

div::Int -> (Int -> Int)

通常,大多數程式設計師至少在學習語言時可以忽略這種行為。從理論的角度來看 ,“當所有函式被統一處理時(一個引數,一個結果),形式證明就更容易了。”