Если ваши входные списки одного типа, вы можете получить декартово произведение произвольного количества списков, используя sequence
(используя List
монаду). Это даст вам список списков вместо списка кортежей:
> sequence [[1,2,3],[4,5,6]]
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]