let transpose (matrix: 'a list list) =
let rec loop x number count =
loop (List.foldBack(fun x acc -> (List.nth x number)::acc) matrix []::x) (number + 1) count
if matrix.IsEmpty then []
else loop [] 0 matrix.Head.Length |> List.rev
[[4;3];[1;5];[6;7]] |> transpose |> printfn "%A"
[[4;3;2];[1;5;0];[6;7;9];[4;3;2];[1;5;0]] |> transpose |> printfn "%A"
[] |> transpose |> printfn "%A"