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
我非常模糊的猜测是,这种限制来自需要确保在分阶段代码中引用时在编译时和运行时使用实际上相同的变体定义(因为相同的代码可以并且将在不同的时间点编译运行时),通过将类型声明放在单独的模块中,编译器会对其进行散列和检查,并使用通常的接口匹配检查。我也认为阴影的可能性在这里起到了一定的作用。