type t = A;;
.<A>.;;
エラーが発生しますUnqualified constructor A cannot be used within brackets. Put into a separate file.
このエラーの根本的な理由は何ですか?
ここでいくつかの参照を見つけることができます
これが公式の説明です - http://okmij.org/ftp/ML/MetaOCaml.html#ctors
私の非常に漠然とした推測では、この制限は、ステージングされたコードで参照されるときに、コンパイル時と実行時に実際に同じバリアント定義が使用されることを保証する必要があるためです (同じコードが異なる時点でコンパイルされる可能性があるため)実行時)、型宣言を別々のモジュールに配置することにより、型宣言はハッシュされ、コンパイラによってインターフェイス マッチングの通常のチェックでチェックされます。また、シャドーイングの可能性がここで何らかの役割を果たしていると思います。