produto cartesiano de listas infinitas haskell

Eu tenho uma função para listas finitas

> kart :: [a] -> [b] -> [(a,b)]
> kart xs ys = [(x,y) | x <- xs, y <- ys]

mas como implementá-lo para listas infinitas? Eu ouvi algo sobre Cantor e teoria dos conjuntos ..?

Eu também encontrei uma função como

> genFromPair (e1, e2) = [x*e1 + y*e2 | x <- [0..], y <- [0..]]

Mas não tenho certeza se isso ajuda, porque abraços só dão pares sem interromper.

Obrigado por ajuda.

questionAnswers(2)

yourAnswerToTheQuestion