Мне интересно, где я могу найти информацию о "a
", используемом в примере длины. Вроде типаж какой-то?
Что такое 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
.
a
не определен, верно? Если я заменю a
на b
или c
или что-то еще, это тоже сработает. Это сбивает с толку!
- person doobdargent; 07.07.2015
List Int
против List a
): имена типов должны начинаться с заглавной буквы, имена переменных типов должны начинаться со строчной буквы.
- person ZhekaKozlov; 07.07.2015
List
, потому что List
не является типом (на самом деле это конструктор типа, но это более сложная вещь). т.е. нельзя объявить функцию типа List -> Int
(она не скомпилируется).
- person ZhekaKozlov; 07.07.2015