Como definir a função que calcula o comprimento de uma lista ?
Como as listas são construídas unicamente à custa da lista vazia e de acrescentar um elemento à cabeça da lista, a definição da função length é muito simples:
length :: [a] -> Int
length [] = 0
length (x:xs) = 1 + length xs
-- Esta função é recursiva uma vez que se invoca a si própria
A função termina uma vez que as invocações recursivas são feitas sobre listas cada vez mais curtas, e vai chegar ao ponto em que a lista é vazia.