OCaml type system