F # - Wie erweitere ich einen Typ mit get_Zero, damit ich einen vorhandenen Typ generisch verwenden kann?

Ich versuche Folgendes:

let c x = System.Numerics.Complex(x, 0.0)
let sum = [c 1.0; c 2.0] |> List.sum

Aber ich bekomme diesen Fehler:

The type 'System.Numerics.Complex' does not support the operator 'get_Zero'

Ich lese die Regeln für Typerweiterungen vonhttps: //msdn.microsoft.com/en-us/library/dd233211.asp, und versuchen Sie Folgendes:

module ComplexExtension =
    let c x = System.Numerics.Complex(x, 0.0)

    type System.Numerics.Complex with
        // I also tried a bunch of other ways of writing these
        // as static or instance members, but nothing worked
        static member Zero = c 0.0
        static member One = c 1.0

open ComplexExtension

let sum = [c 1.0; c 2.0] |> List.sum

Ich bekomme immer noch diesen Fehler.

Ist es möglich, einen Typ mit dem Operator get_Zero zu erweitern? Oder muss ich meinen eigenen Wrapper-Typ um @ erstelleSystem.Numerics.Complex und überschreibe alle Operatoren, wenn ich möchte, dass es die anderen Dinge macht, die komplexe Zahlen tun?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage