F# 检查泛型类型参数是否被区分联合

问题描述

如何在创建约束时指定可区分联合的类型?我应该写什么来代替 discriminatedUnion

let f<'U when 'U :> discriminatedUnion> ()

解决方法

我不相信有任何方法可以在编译时强制执行此检查。在运行时,您可以在实现中使用 FSharpType.IsUnion ref 并可能通过抛出异常来处理错误情况。