Este código tem o intuito de calcular a sequência infinita de números Hamming. A sequência de Hamming começa pelo número 1, os restantes valores são obtidos pela multiplicação de 2, 3 ou 5 por um número Hamming.
hamming = 1 : merge h2 (merge h3 h5) where h2 = map (2*) hamming h3 = map (3*) hamming h5 = map (5*) hamming -- Une as várias listas infinitas de números de hamming. -- Em caso de igualdade, ignora 1 dos números para não aparecer repetidos. merge a@(x:xs) b@(y:ys) | x < y = x : merge xs b | x == y = x : merge xs ys | otherwise = y : merge a ys