Это, пожалуй, очень простой вопрос, но, тем не менее, он, похоже, не был покрыт SO.Haskell- (объявление типа), что такое «а»?
Я недавно взял Haskell и до сих пор не тип декларация состояла в основном из следующих:
Int
Bool
Float
etc, etc
Теперь я получаю в списки и я вижу объявление типа, которые используют a
, например, в следующей функции что перебирает ассоциативный список:
contains :: Int -> [(Int,a)] -> [a]
contains x list = [values | (key,values)<-list, x==key]
Может кто-то предоставить объяснение относительно того, что это a
, и как это работает? Кажется, что из наблюдения он представляет каждый тип. Означает ли это, что я могу ввести любой список любого типа в качестве параметра?
Так же важно, что 'a' не является особенным: * любой * идентификатор нижнего регистра означает это. Это переменная типа *, и в одной и той же сигнатуре существует множество разных переменных типа. Например, 'const :: a -> b -> a' принимает два аргумента, каждый из которых имеет тип, и возвращает значение с тем же типом, что и его первый вход. – amalloy
Я вижу, его очень общее. Поэтому, я думаю, в большинстве случаев 'a' обычно представляет элементы, которые моя функция действительно не использует или не меняет слишком много. – Bolboa
@Bolboa: Да, это тесно связано с понятием «дженерики» на других языках. И да, если тип полностью общий, мало что можно сделать непосредственно для самого значения. У Haskell есть способ предоставить больше информации о типе (например, «можно сравнить для равенства», «можно печатать», «можно обрабатывать как число»), что позволяет вам делать больше обработки значений ; если вы заинтересованы в этом, тогда найдите «классы» в документации или учебнике. – psmears