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