OCaml variants as first class values