泛型函数的泛型零

Generic zero for generic function

我有一个函数可以计算序列的累加和。

let cumsum<'T> = Seq.scan (+) 0 >> Seq.skip 1 >> Seq.toArray

虽然它看起来很通用,但整数 0 使它变得非通用,因此我不能用浮点数序列调用该函数。

是否有一个通用零可以替代我的硬编码 0,或者可能是一种使函数通用的不同方法。

 LanguagePrimitives.GenericZero

:)

您可以使用 GenericZero primitive but you need to make your function inline and make it explicitly a function (right now your function is written in point-free style),因为原则上不能将值设为内联。

let inline cumsum s = 
  s |> Seq.scan (+) LanguagePrimitives.GenericZero |> Seq.skip 1 |> Seq.toArray

请注意,通过删除类型参数 'T,静态成员约束由编译器自动推断:

val inline cumsum :
  s:seq< ^a> ->  ^b []
    when ( ^b or  ^a) : (static member ( + ) :  ^b *  ^a ->  ^b) and
          ^b : (static member get_Zero : ->  ^b)