При использовании интерактивного интерпретатора 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]
, который я считаю немного более читаемым.