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