Что такое "a" в "List a" в примере длины?
Мне интересно, где я могу найти информацию оa
"используется в примере длины. Кажется, это какой-то тип?
2 ответа
[1,2,3]
это List Int
, функции, которые могут работать только со списками объектов, должны иметь List Int
в их типе подписи. ["a", "b"]
это List String
, функции, которые могут работать только со списками строк, должны иметь List String
в их типе подписи. Функция, которая работает со списком любого типа (например, List.length
) может иметь подпись общего типа (например, List a
или же List b
). Значение a
относится только к сигнатуре типа. Например, функция с типом List a -> a
когда дано List Int
вернет Int
, Когда дано List String
было бы вернуть String
,
Возьмите для примера map
функция, которая имеет подпись (a -> b) -> List a -> List b
, Он говорит, что, учитывая функцию, которая принимает a
и возвращает b
и List a
, он вернет List b
,
Учитывая функцию, которая принимает String
и возвращает Int
и List String
, map
вернет List Int
,
List.map String.length ["a", "aa", "aaa"]
-- [1, 2, 3] : List Int
Учитывая функцию, которая принимает Int
и возвращает String
и List Int
, map
вернет List String
,
List.map (\n -> String.repeat n "a") [1, 2, 3]
-- ["a", "aa", "aaa"] : List String
a
переменная типа
Это означает, что тип List
является полиморфным (родовым), т.е. a
можно заменить любым типом (Int
, String
...) Функция length
тоже полиморфный. Например, length [1, 2, 3]
вернусь 3
, length ["word1", "word2"]
вернусь 2
,