Как добиться рекурсивного deftype

Мне любопытно, как сделать deftype Clojure, который содержит ссылку на себя, например.

  (deftype BinaryTree [^BinaryTree left ^BinaryTree right])

Это не работает... однако я не вижу причин, почему это не должно быть возможным, поскольку базовый класс Java вполне способен ссылаться на себя.

Что я здесь делаю неправильно?

Майк.

Ответ 1

В настоящее время ^ Классы-подсказки по полям (в противовес ^ примитивным подсказкам) отбрасываются, поэтому нет никакой выгоды в попытке их поместить. Это может измениться в будущем.

Однако автоматическая ссылка в определении типа (например, в телах методов, а не в полях) работает несколько, но реализация немного взломана. Там небольшой стимул для исправления автоссылки в текущем java-компиляторе, учитывая обещание переписать компилятор в Clojure.