所謂polymorphic function(多態函數)指的是可作用於多種類型的輸入的函數。

以length函數為例:

‘’’
length :: [a] -> Int
‘’’

length函數是用來計算list長度,不管輸入是整數的list、字元的list、tuple的list…,因為這個函數在乎的是包含幾個元素,而非哪種元素,因此length被定義為一個多態的函數。

length函數簽名中的 type variable a 即是用以指涉它的函數輸入接受各種元素類型的list。

再舉個例子:

‘’’
id :: a -> a
‘’’

id函數是一個不管給他什麼參數,都會回傳自己的參數。可以觀察到兩件事:

  1. id函數的簽名中,只出現 type variable a,也就是說id函數可以接收任何type的參數。
  2. id函數接收的type和回傳的type是同一個。