type t = A;;
.<A>.;;
会给出错误Unqualified constructor A cannot be used within brackets. Put into a separate file.
此错误的根本原因是什么?
可以找到一些参考here
答案 0 :(得分:3)
以下是官方解释 - http://okmij.org/ftp/ML/MetaOCaml.html#ctors
我非常模糊的猜测是,这个限制来自于需要确保在分阶段代码中引用时在编译时和运行时使用实际相同的变体定义(因为相同的代码可以并且将在不同的点编译在运行时的时间),通过将类型声明放在单独的模块中,它们被编译器进行散列和检查,并通常检查接口匹配。另外我认为阴影的可能性在这里扮演了一些角色。