Что такое "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,

Другие вопросы по тегам