Sequências de tamanho variável de elementos de um mesmo tipo

é o tipo das listas de elementos do tipo T.

[10,20,30] :: [Int]
[10, 20, 6, 19, 27, 30] :: [Int]
[True,True,False,True] :: [Bool]
[(‘a’,True), (‘b’,False)] ::[(Char,Bool)]
[[3,2,1], [4,7,9,2], [5]] :: [[Int]]

Outra maneira de escrever uma lista :

[1,2,3] = 1 : [2,3] = 1 : 2 : [3] = 1 : 2 : 3 : [ ]

Na realidade as listas são tipos algébricos, cujos elementos são construídos à custa dos seguintes construtores :

[] :: [a]
(:) :: a -> [a] -> [a]

[ ] representa uma lista vazia

( : ) é o construtor infixo que recebe um elemento e uma lista, e acrescenta o elemento à cabeça da listo (isto é, lado esquerdo da lista).

Nota : ( : ) é associativo à direita

Funções simples sobre listas

head :: [a] -> a
head (x:xs) = x
-- (x:xs) é um padrão que repesenta uma lista com pelo menos um elemento
-- x é o primeiro elemento da lista e xs é a restante lista
> head [1,2,3]
1
-- Pattern matching : x=1 : xs=[2,3]
tail :: [a] -> [a]
tail (x:xs) = xs
null :: [a] -> Bool
null [] : True
null (x:xs) = False