这段代码:
open System
open System.Collections.Generic
type INode =
interface
inherit IEqualityComparer<INode>
inherit IEquatable<INode>
end
let myFun<'N when 'N :> INode> (n:'N) = n = n
生成以下构建错误:
A type parameter is missing a constraint 'when 'N : equality'
我知道我可以在函数级别用
来安抚编译器let myFun<'N when 'N :> INode and 'N : equality> (n:'N) = n = n
但是我更喜欢让myFun
中的类型约束和INode
处的“修复”问题,以便在我想要多个函数时更容易在同样的约束下。
有可能吗?
答案 0 :(得分:4)
您不需要<>
内的位,这会导致问题在移除后消失:
open System
open System.Collections.Generic
type INode =
interface
inherit IEqualityComparer<INode>
inherit IEquatable<INode>
end
let myFun (n:'N when 'N :> INode) = n = n
一个更简单的版本(来自@ben)是使用速记表示可向下转换的类型如下:
let myFun (n: #INode) = n = n