I have to do projection of a list of lists which returns all combinations with each element from each list. For example:
projection([[1]; [2; 3]]) = [[1; 2]
let crossProduct listA listB listC listD listE = listA |> Seq.collect (fun a -> listB |> Seq.collect (fun b -> listC |> Seq.collect (fun c -> listD |> Seq.collect (fun d -> listE |> Seq.map (fun e -> a,b,c,d,e))