将F#泛型函数约束为联合类型?

时间:2015-02-16 16:31:25

标签: generics f# discriminated-union

根据标题,有没有办法将F#泛型函数约束为联合类型?到目前为止我正在使用:

let toDomain<'T> external: 'T option =
    assert FSharpType.IsUnion(typeof<'T>)
    ...

如果我尝试使用非联合,那么在运行时因System.ArgumentException而失败,但我希望先检查一下。

1 个答案:

答案 0 :(得分:5)

没有

如果您查看IsUnion的{​​{3}}并稍微遵循代码,可以归结为检查属性/参数[<CompilationMapping(SourceConstructFlags.SumType)>]是否存在。

目前,不支持纯粹的基于属性的约束,无论是在F#还是在.NET中。