La forma correcta de usar una estructura de datos en OCaml

Ok he escrito unbinary search tree en OCaml.

type 'a bstree = 
    |Node of 'a * 'a bstree * 'a bstree
    |Leaf


let rec insert x = function
    |Leaf -> Node (x, Leaf, Leaf)
    |Node (y, left, right) as node -> 
        if x < y then
            Node (y, insert x left, right)
        else if x > y then
            Node (y, left, insert x right)
        else
            node

Supongo que el código anterior no tiene problemas.

Cuando lo uso, escribo

let root = insert 4 Leaf

let root = insert 5 root

...

¿Es esta la manera correcta deuse/insert al arbol?

Quiero decir, supongo que no debería declarar la raíz y cada vez que cambio el valor de la raíz variable, ¿no?

Si es así, ¿cómo puedo mantener siempre una raíz y puedo insertar un valor en el árbol en cualquier momento?

Respuestas a la pregunta(1)

Su respuesta a la pregunta