Согласно этой записи , F # поддерживает методы расширения для экземпляров объектов и статических классов. Например:
module CollectionExtensions =
type System.Linq.Enumerable with
static member RangeChar(first:char, last:char) = {first .. last}
open ExtensionFSharp.CollectionExtensions
Если я наберу System.Linq.Enumerable.
, в моем окне Intellisense появится статический метод RangeChar
.
Я хочу добавить статический метод for_alli
в модуль Seq. Я изменил следующий код выше следующим образом:
module SeqExtensions =
type Microsoft.FSharp.Collections.Seq with (* error on this line *)
static member for_alli f l =
l
|> Seq.mapi (fun i x -> i, x)
|> Seq.for_all (fun (i, x) -> f i x)
Хотя оба фрагмента кода имеют одинаковую структуру, SeqExtensions
не компилируется. F # выделяет слово Seq
и возвращает ошибку «Тип« Seq »не определен».
Как создать методы статического расширения в модуле Seq?