有没有办法正确抑制 F# 类型约束警告?
Is there a way to correctly suppress an F# Type Constraint Warning?
我有一个设计明确定义的类型约束,用于我打算使用具有相应 List/Collection 类型的类型的一组函数。即使我实际上定义了约束,它仍然给我一个我无法删除的警告。这并不重要,但我真的非常努力地处理所有警告,而无法清除列表有点烦人。
let domainValue (domain:'Domain when 'Domain :> 'ItemDomain list) //Address Type Constraint Warning ?
: Value<'ItemDomain,'Domain> = (domain, (domain |> validDomainResult |> Some)) ||> value
你的约束是说参数应该是一个类型 'Domain
使得 'Domain :> list<'ItemDomain>
,即以 list<'ItemDomain>
作为基础的类型 class。
但是,list<'T>
是一个密封的 class,因此除了 list<'ItemDomain>
之外没有其他类型可以满足约束 - 唯一满足约束的类型是 list<'ItemDomain>
所以你也可以简化类型声明并使用:
let domainValue (domain:list<'ItemDomain>) = ...
值得注意的是,对于像 seq<'T>
这样的接口,情况并非如此,因此以下不会给出错误:
let domainValue (domain:'Domain when 'Domain :> seq<'ItemDomain>) = ...
这将允许参数是任何类型的 'ItemDomain
值集合,包括数组、列表等。此外,您可以使用 #
类型更简洁地编写相同的约束,这意味着同样的事情:
let domainValue (domain:#seq<'ItemDomain>) = ...
我有一个设计明确定义的类型约束,用于我打算使用具有相应 List/Collection 类型的类型的一组函数。即使我实际上定义了约束,它仍然给我一个我无法删除的警告。这并不重要,但我真的非常努力地处理所有警告,而无法清除列表有点烦人。
let domainValue (domain:'Domain when 'Domain :> 'ItemDomain list) //Address Type Constraint Warning ?
: Value<'ItemDomain,'Domain> = (domain, (domain |> validDomainResult |> Some)) ||> value
你的约束是说参数应该是一个类型 'Domain
使得 'Domain :> list<'ItemDomain>
,即以 list<'ItemDomain>
作为基础的类型 class。
但是,list<'T>
是一个密封的 class,因此除了 list<'ItemDomain>
之外没有其他类型可以满足约束 - 唯一满足约束的类型是 list<'ItemDomain>
所以你也可以简化类型声明并使用:
let domainValue (domain:list<'ItemDomain>) = ...
值得注意的是,对于像 seq<'T>
这样的接口,情况并非如此,因此以下不会给出错误:
let domainValue (domain:'Domain when 'Domain :> seq<'ItemDomain>) = ...
这将允许参数是任何类型的 'ItemDomain
值集合,包括数组、列表等。此外,您可以使用 #
类型更简洁地编写相同的约束,这意味着同样的事情:
let domainValue (domain:#seq<'ItemDomain>) = ...