一個Haskell的類型系統的有趣特性(*)確定的函數的作用是,有時你可以告訴究竟什麼功能並僅基於其類型簽名(假設沒有unsafe IO
黑暗魔法invloved)。由它的類型
例如,對於類型簽名a -> a
任何函數必須是恆等函數,和(a,b) -> a
類型的任何功能等同於fst
。在某些情況下,您無法完全確定功能:類型爲a -> Int
的不同可能功能有無數種,但它們都是常數 - 它們都忽略第一個參數。
我覺得這個屬性很迷人,但我懷疑它只適用於「微不足道」的功能,如id
和const
。我對麼?
而且,在這裏我的推理只是基於直覺 - 例如,在a -> a
,我們「一無所知」關於a
(而不是約束的功能,如Num a => a -> a
),所以「不能做什麼」與它以外的其他沒有變化。有沒有正式的方法來處理這種扣除?
*我知道Haskell的類型系統是基於辛德米爾納型系統上,但我不熟悉它足以承擔任何有關它
我想不出一個合適的標題,我不滿足於目前的標題 - 建議和/或編輯是受歡迎的。謝謝! – Benesh
Philip Wadler的論文「免費定理!」處理這個話題。雖然我不太明白這個答案。 – delnan
@delnan謝謝!以下是未來讀者的[鏈接](http://ttic.uchicago.edu/~dreyer/course/papers/wadler.pdf)。它似乎需要類型理論的基本背景。 – Benesh