当前位置:  开发笔记 > 编程语言 > 正文

类型推断在具有静态成员约束的泛型类型上失败

如何解决《类型推断在具有静态成员约束的泛型类型上失败》经验,为你挑选了0个好方法。

我已经定义了以下类型(从代码中简化):

type Polynomial<'a when 'a :(static member public Zero : 'a) 
                and 'a: (static member (+): 'a*'a -> 'a) 
                and 'a : (static member (*): 'a*'a -> 'a) >  =
    | Polynomial of 'a list
    with 
    static member inline (+) (x: Polynomial<'a> , y : Polynomial<'a>) : Polynomial<'a>= 
        match x,y with
        |Polynomial xlist, Polynomial ylist ->
            let longer, shorter = 
                if xlist.Length> ylist.Length then xlist, ylist
                else ylist, xlist
            let shorterExtended = List.append shorter (List.init (longer.Length - shorter.Length) (fun _ -> LanguagePrimitives.GenericZero<'a>))
            List.map2 (+) longer shorterExtended |> Polynomial

当我建立时,我收到警告:

警告FS0193:类型参数缺少约束'when(^ a或^?23604):( static> member(+):^ a*^?23604 - > ^?23605)'

在最后一行的"更长"一词.据我所知,它应该能够推断它总是添加'a'的两个成员.我怎么能摆脱这个?

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有