Атрибуты OCaml

Я просматривал руководство и обнаружил, что в OCaml есть атрибуты для объявления вещей как устаревших (см. http://caml.inria.fr/pub/docs/manual-ocaml/extn.html), но я не могу понять, как заставить их распознаваться компилятором.

Вот программа, которую я написал:

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

(Я тоже пробовал [@@deprecated ...] скорее, чем [@@ocaml.deprecated ...] с такими же результатами). Я не получаю никаких предупреждений при запуске:

ocamlbuild src/trial.byte

Есть ли что-то, что мне нужно настроить в моем _tags файл? Есть что-то еще, что я здесь скучаю?

2 ответа

Решение

Устаревшая аннотация доступна только для значений (не для типов) и в основном для подписей. В вашем случае вот как это должно быть сделано:

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

Кажется, работает с 4.02.3, для этой версии, #require "ppx_jane";; перед вашим кодом. С 4.03.0 работает изначально.

Другие вопросы по тегам