【发布时间】:2016-03-29 21:54:01
【问题描述】:
我定义了以下类型(从代码简化):
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 or ^?23604) : (static >member ( + ) : ^a * ^?23604 -> ^?23605)'
在最后一行的“更长”这个词上。据我所见,它应该能够推断出它总是添加两个成员'a。 我怎样才能摆脱它?
【问题讨论】:
标签: generics f# type-inference