Search code examples
ocamlppx

OCaml attributes


I was looking at the manual and found that there are attributes in OCaml for declaring things as deprecated (see http://caml.inria.fr/pub/docs/manual-ocaml/extn.html), but I can not figure out how to get them to be recognized by the compiler.

Here's the program that I wrote:

let x = 1 [@@ocaml.deprecated "don't use this"]

type t = X | Y [@@ocaml.deprecated "don't use this"]

let _ =
  let y = Y in
  match y with
  | X ->
    print_string (string_of_int x)
  | Y -> assert false

(I also tried [@@deprecated ...] rather than [@@ocaml.deprecated ...] with the same results). I don't get any warnings when I run:

ocamlbuild src/trial.byte

Is there something that I need to set up in my _tags file? Is there something else that I'm missing here?


Solution

  • The deprecated annotation is only available for values (not on types), and mostly in signatures. In your case, here how it should be done:

    module M : sig
      val x : int [@@deprecated "don't use this"]
      type t =
        | X [@deprecated "don't use this"]
        | Y [@deprecated "don't use this"]
    end = struct
      let x = 1
      type t = X | Y
    end
    open M
    
    let _ =
      let y = Y in
      match y with
      | X ->
        print_string (string_of_int x)
      | Y -> assert false