При использовании интерактивного интерпретатора GHC можно запросить предполагаемый тип выражения:
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Кажется, что он принимает имена переменных типа из подписи, поскольку map
определяется как
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
в прелюдии. Это имеет большой смысл! Мой вопрос: как имена переменных типа выбраны, когда нет подписи?
Примером может быть
Prelude> :t map fst
map fst :: [(b, b1)] -> [b]
где он выбрал имена b
и b1
. Ясно, что переименование должно происходить, но просто начиная с a
, b
,... дал бы
map fst :: [(a, b)] -> [a]
который я считаю немного читабельнее.