Gregory
Gregory

Reputation: 1235

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?

Upvotes: 4

Views: 952

Answers (2)

Drup
Drup

Reputation: 3739

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

Upvotes: 3

Pierre G.
Pierre G.

Reputation: 4431

Seems to work from 4.02.3, for this version, #require "ppx_jane";; before your code. With 4.03.0, it works natively.

Upvotes: 1

Related Questions