當使用交互式GHC解釋,有可能要求推斷類型的表達式:GHCi如何爲類型變量選擇名稱?
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
看來,它需要的類型變量的名稱從簽名,因爲map
是defined作爲
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
在Prelude中。這很有道理!我的問題是:在沒有給定簽名時如何選擇類型變量名稱?
一個例子是
Prelude> :t map fst
map fst :: [(b, b1)] -> [b]
它撿起名b
和b1
。很明顯,重命名必須發生,而只是開始a
,b
,......將給予
map fst :: [(a, b)] -> [a]
代替,我覺得稍微更具可讀性。
謝謝,這是一個很好的解釋!我沒有想到你想要重新命名幾個`n`但保持相關的情況。 – 2011-12-15 14:26:06