Combinando una columna de listas en OCaml

Quiero esencialmente transponer una matriz en OCaml (sin usar recursividad o ningún tipo de bucle)

Por ejemplo, si tengo la siguiente matriz:[[1;2];[3;4]],
Quiero tener la salida de[[1;3];[2;4]].

Lo que he hecho hasta ahora es dividir la matriz original en columnas individuales:

//function that separates into cols
let separate li =
    List.map (fun x -> [x]) li;;

Llamo a esta función auxiliar desde otra función:

let trans x = 
    List.concat (List.map separate li) x;;

Estaba pensando que esto combinaría todas las columnas de la manera que quisiera, pero terminé con el siguiente resultado:[[1];[2];[3];[4]].

Respuestas a la pregunta(2)

Su respuesta a la pregunta