Как GHCi выбирает имена для переменных типа?
При использовании интерактивного интерпретатора 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]
вместо этого, который я нахожу немного более читабельным.