获取FS0035 => Construct已弃用

时间:2012-03-23 11:02:12

标签: f# compiler-errors deprecated fsyacc fslex

在基于fsyacc的项目中,我有这一行:

type 'a cucomment = string

这是我收到的完整错误说明:

  

CALast.fs(117,9):错误FS0035:不推荐使用此结构:此   type abbreviation有一个或多个声明的类型参数   出现在缩写的类型中。类型缩写必须全部使用   声明的类型参数在缩写的类型中。考虑   删除一个或多个类型参数,或使用具体类型   包装基础类型的定义,例如'type C<'a> = C   ......“。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

F#不再允许在不声明新类型的情况下将泛型类型参数添加到类型的类型别名。如果要定义包装其他类型的泛型类型,则必须使用一些构造函数。例如,您可以使用单案区分联合:

type 'a Cucomment = CC of string

不幸的是,这意味着您必须更改使用该类型的所有代码,以使用模式匹配或通过向该类型添加Value成员来解包该值。

允许泛型类型别名的唯一情况是当您声明具有度量单位的类型的版本时,这需要特殊属性。但是,这可能对你不起作用(因为单位行为完全不同):

[<MeasureAnnotatedAbbreviation>]
type 'a Cucomment = string 

如果这是由 fsyacc 生成的某些代码,那么这是fsyacc中应该修复的错误(我认为这是最近的更改)。在这种情况下,请fsbugsmicrosoftcom报告。