Подтвердить что ты не робот

Статические методы расширения на модуле Seq

Согласно этот пост, F # поддерживает методы расширения для экземпляров объектов и статических классов. Например:

module CollectionExtensions = 
    type System.Linq.Enumerable with   
        static member RangeChar(first:char, last:char) = {first .. last}

open ExtensionFSharp.CollectionExtensions 

Если я набираю System.Linq.Enumerable., статический метод RangeChar появляется в моем окне Intellisense.

Я хочу добавить статический метод 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?

4b9b3361

Ответ 1

Чтобы расширить модуль F #, просто создайте еще один модуль с тем же именем:

module Seq =
    let myMap f s = seq { for x in s do yield f x }

Seq. // see your stuff here alongside normal stuff