f# extension-methods

f# - Métodos de extensión estática en el módulo Seq



extension-methods (1)

Para extender un módulo F #, simplemente crea otro módulo con el mismo nombre:

module Seq = let myMap f s = seq { for x in s do yield f x } Seq. // see your stuff here alongside normal stuff

Según esta publicación , F # admite métodos de extensión en instancias de objetos y clases estáticas. Por ejemplo:

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

Si System.Linq.Enumerable. , el método estático RangeChar aparece en mi ventana Intellisense.

Quiero agregar un método estático, for_alli , al módulo Seq. He modificado el siguiente código anterior de la siguiente manera:

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)

Aunque ambos fragmentos de código tienen la misma estructura, SeqExtensions no se compila. F # resalta la palabra Seq y devuelve el error "El tipo ''Seq'' no está definido".

¿Cómo creo métodos de extensión estática en el módulo Seq?