我在获取具有类型约束的接口以正常工作时遇到问题。
这是类型
type LeftistHeap<'a when 'a : comparison> =
...
interface IHeap<LeftistHeap<'a>, 'a> with
...
member this.Insert (x : 'a) = LeftistHeap.insert x this
和界面
type IHeap<'a when 'a : comparison> =
inherit System.Collections.IEnumerable
inherit System.Collections.Generic.IEnumerable<'a>
...
type IHeap<'c, 'a when 'c :> IHeap<'c, 'a> and 'a : comparison> =
inherit IHeap<'a>
...
abstract member Insert : 'a -> 'c
这段代码没问题
let insertThruList l h =
List.fold (fun (h' : LeftistHeap<'a>) x -> h'.Insert x ) h l
但是如果我尝试概括接口的代码
let insertThruList l h =
List.fold (fun (h' : IHeap<_,'a>) x -> h'.Insert x ) h l
我在 h'.Insert 处收到此错误
类型不匹配。期望一个 'b
但给定一个 IHeap<'b,'a>
当统一 ''b' 和 'IHeap<'b,'a>' 时,结果类型将是无限的