有没有办法强制在MSIL中创建F#类型别名作为实际类型?

时间:2017-05-17 21:09:44

标签: f# cil

我正在努力从大量下游代码使用的大型F#库中获取大量功能。由于太长的原因无法在此解释,我需要经历中间步骤,将我之后的类型和模块移动到一个新的单独的F#项目和一个新的命名空间,并使用类型别名/缩写创建存根,以便它们使用的位置要在旧的大型图书馆中,如下所示:type TypeBeingMoved = New.Namespace.TypeBeingMoved。对于模块,我必须更明确,实际上为模块中定义的每个函数创建这样的存根(这有点单调乏味,但还可以)。我们的想法是,我们需要让正在被肢解的库的当前用户迁移到使用新的较小库的几个版本,通过强制编译器警告鼓励他们,我们将使旧的大型库存根发出 - 至少这是计划。

这适用于模块,这种存根工作正常。

出现麻烦是因为类型别名是故意"掉线"在将F#转换为MSIL期间 - 请参阅https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/type-abbreviations - 您应该真正使用他们指向的类型。我非常希望我的用户能够做到这一点,但不幸的是需要跳过上面描述的箍。就目前而言,我的用户'当前代码只是停止编译,因为使用指向另一个库/命名空间的别名/缩写替换类型会导致类型从原始库的DLL中消失。有没有办法强制从类型别名/缩写生成类型,或者创建类型别名/缩写类型的类型存根?

0 个答案:

没有答案