MetaOCaml 不合格的构造函数

MetaOCaml unqualified constructor

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

会报错Unqualified constructor A cannot be used within brackets. Put into a separate file.

此错误的根本原因是什么?

可以找到一些参考here

这里是官方解释 - http://okmij.org/ftp/ML/MetaOCaml.html#ctors

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