Томас дал отличный совет. Ваша основная операция - добавить один список в другой. Это может помочь сначала написать эту функцию как отдельную функцию. Это будет выглядеть примерно так:
let rec myappend a b =
match a with
| [] -> (* Empty list prefixed to b (easy case) *)
| ahead :: atail -> (* Recursive case *)
Имея собственную функцию добавления, вы можете выполнить другой уровень рекурсии
добавить все списки верхнего уровня, как предлагает Томас.