Вам нужно добавить несколько членов, которые используются функцией sum
для выполнения расчетов:
type Foo(value:int) =
member x.Value = value
// Two members that are needed by 'Array.sum'
static member (+) (a:Foo, b:Foo) = Foo(a.Value + b.Value)
static member Zero = Foo(0)
// Not needed for 'Array.sum', but allows 'Array.average'
static member DivideByInt(a:Foo, n:int) = Foo(a.Value / n)
Функция sum
начинается со значения, возвращаемого Zero
, а затем добавляетзначения Foo
с использованием перегруженного оператора +
(average
затем делит результат на целое число):
let a = Array.init 10 (fun n -> Foo(n))
let sum = Array.sum a
sum.Value // Returns 45