Атрибуты 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 работает изначально.