fully working OCaml bindings