F # расширяющий ограниченный массив - PullRequest
0 голосов
/ 05 марта 2019

Скажем, у меня есть следующий фрагмент

type 'T``[]`` when 'T : (static member (+) : 'T -> 'T -> 'T) with
    member inline self.sum = Array.fold ( + ) self

Надеюсь, очевидно, что я хочу добавить метод расширения только тогда, когда 'T поддерживает оператор +.

Однако я продолжаюполучение следующих ошибок:

Error FS0957 One or more of the declared type parameters for this type extension have a missing or wrong type constraint not matching the original type constraints on '[]<_>'

Возможно ли это для метода расширения?Если это так, чего мне не хватает?

1 Ответ

0 голосов
/ 05 марта 2019

Лучшее, что я мог придумать, было

type 'T``[]`` with
    member inline this.mysum< ^T when ^T : (static member (+) : ^T * ^T -> ^T)>() = 
        Array.reduce (fun v1 v2 -> (^T : (static member (+): ^T * ^T -> ^T)  (v1, v2)))

, которое все еще не работает (по крайней мере, в FSI - не пробовал компилировать).Я не уверен, что это вообще возможно.

Вместо этого я предлагаю вам использовать IEnumerable<_> методы расширения в System.Linq:

open System.Linq
[| 1..10 |].Sum()
...