Compile-time metaprogramming for OCaml