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?