let cartesianMany ll =
let cart lol l = List.map (fun i -> List.map (fun j -> i@[j]) l) lol |> List.collect id
List.tail ll |> List.fold (fun s t -> cart s t) (List.head ll |> List.map (fun i -> [i]))
cartesianMany [[1;2]; [4;5;6]; [7;8]] |> printfn "%A"