Higher-kinded programming in OCaml