Haskell- Dos listas en una lista de tuplas

Estoy tratando de implementar una función (que se describe a continuación) que toma dos listas (cada una o ambas puede ser infinita) y devolver una lista de tuplas de todos los pares de elementos posibles entre las listas

zipInf :: [a] -> [b] -> [(a,b)]

(Por ejemplo, la salida debería ser así, pero no tiene que ser exactamente así)

zipInf [0 .. 2] ['A' .. 'C'] ~> [(0,'A'),(1,'A'),(0,'B'),(1,'B'),(0,'C'),(2,'A'),(2,'B'),(1,'C'),(2,'C')]

zipInf [] [0 ..] ~> []

zipInf [0 ..] [] ~> []

take 9 (zipInf ['A'] [0 .. ]) ~> [('A',0),('A',1),('A',2),('A',3),('A',4),('A',5),('A',6),('A',7),('A',8)]

Comencé a implementarlo así:

zipInf :: [a] -> [b] -> [(a,b)]
zipInf [] _ = []
zipInf _ [] = []
zipInf

Quería incluir la lista en una función auxiliar para producir las listas, pero la que hice no compila y no sabe cómo manejar listas infinitas.

Función de ayuda-

oneList :: [a] -> [b] [(a,b)]
oneList [] _ = []
oneList x:xs y:ys = [(x,y)] ++ oneList

Respuestas a la pregunta(5)

Su respuesta a la pregunta