当使用交互式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