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

Constraining an F# generic function to a union type?

根据标题,有什么方法可以将 F# 泛型函数限制为联合类型?到目前为止我正在使用:

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

如果我尝试使用 non-union,它会在运行时以 System.ArgumentException 失败,但我更希望早点检查。

没有

如果您查看 IsUnionimplementation 并稍微遵循代码,它归结为检查是否存在 attribute/argument [<CompilationMapping(SourceConstructFlags.SumType)>]

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