Как GHCi выбирает имена для переменных типа?

При использовании интерактивного интерпретатора GHC можно запросить предполагаемый тип выражение:

Prelude> :t map
map :: (a -> b) -> [a] -> [b]

Кажется, что он берет имена переменных типа из сигнатуры, поскольку карта определена как

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]

, который я считаю немного более читаемым.

12
задан Martin Geisler 4 January 2012 в 20:00
поделиться