produkt kartezjański nieskończonych list haskell

Mam funkcję dla skończonych list

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

ale jak zaimplementować go dla nieskończonych list? Słyszałem coś o Cantorze i teorii mnogości ..?

Znalazłem też taką funkcję

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

Ale nie jestem pewien, czy to pomaga, ponieważ uściski dają tylko pary bez przerywania.

Dzięki za pomoc.

questionAnswers(2)

yourAnswerToTheQuestion