通用记录参数化的泛型类型的语法

时间:2014-07-09 15:33:28

标签: generics types f#

假设我已经定义了通用记录

type GenericType1<'T> = {MyField : 'T}

我希望定义另一种通过此类型参数化的泛型类型。在我的C#鼻子之后,我会写这样的东西:

type GenericType2<'T, GenericType1<'T> > = class end

不幸的是,这不起作用,也不是这样:

type GenericType2<'T, 'S when 'S :> GenericType1<'T> > = class end

因为作为记录的GenericType1被密封,编译器不接受子类型约束。但是,如果GenericType1是,则上述可以正常工作

所以,我的问题是:我应该用什么语法来定义GenericType2,它是由记录GenericType1 参数化的?

1 个答案:

答案 0 :(得分:1)

正如错误所说,记录是密封的,那么这种子类型约束到底意味着什么呢?您可以在没有其他类型的arg的情况下执行以下操作。

type GenericType2<'T>() = 
    member val MyRecord = {MyField=Unchecked.defaultof<'T>}

这是否涵盖了您的用例?