Как 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]

вместо этого, который я нахожу немного более читабельным.

Ответы на вопрос(1)

Ваш ответ на вопрос