MetaOCaml неквалифицированный конструктор

type t = A;;
.<A>.;;

выдаст ошибку Unqualified constructor A cannot be used within brackets. Put into a separate file.

Что является основной причиной этой ошибки?

Некоторая ссылка может быть найдена здесь

1 ответ

Решение

Вот официальное объяснение - http://okmij.org/ftp/ML/MetaOCaml.html

Мое весьма смутное предположение состоит в том, что это ограничение исходит из необходимости гарантировать, что фактически одно и то же определение варианта используется во время компиляции и во время выполнения при обращении в поэтапном коде (поскольку один и тот же код может и будет компилироваться в разные моменты времени в во время выполнения), помещая объявления типов в отдельные модули, они хешируются и проверяются компилятором с обычными проверками соответствия интерфейса. Также я думаю, что возможность затенения играет здесь некоторую роль.

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