我正在努力从大量下游代码使用的大型 F# 库中获取大量功能。由于冗长的原因无法在这里解释,我需要完成中间步骤,将我使用的类型和模块移动到一个新的单独的 F# 项目和一个新的命名空间,并使用类型别名/缩写创建存根,用于它们以前所在的位置在古老的大图书馆里,像这样:type TypeBeingMoved = New.Namespace.TypeBeingMoved。对于模块,我必须更加明确,实际上为模块中定义的每个函数制作这样的存根(这有点乏味,但还可以)。我们的想法是,我们需要为正在被肢解的库的当前用户提供几个版本以迁移到使用新的较小的库,通过强制编译器警告鼓励他们,我们将使旧的大型库存根发出 - 至少这就是计划。
这适用于模块,这种存根工作正常。
麻烦的产生是因为类型别名是故意“下降” F#的为MSIL翻译过程中-见https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/type-abbreviations -这个想法是你应该真正使用他们指向的类型。我非常希望我的用户做到这一点,但不幸的是需要跳过上面描述的箍。因此,我的用户当前的代码只是停止编译,因为用指向另一个库/命名空间的别名/缩写替换类型会导致该类型从原始库的 DLL 中消失。有没有一种方法可以强制从类型别名/缩写生成类型,或者有一种方法可以创建一个等同于类型别名/缩写的类型存根?