如何在 F# 列表上定义扩展方法?
像这样天真的尝试会导致错误:
type list with
member this.abc() = 100
正确的语法是:
type List<'a> with
member this.abc() = 100
您也可以使用限定名称Microsoft.FSharp.Collections.List<'a>
,但list<'a>
不能使用类型缩写。
也就是说,使用模块函数更惯用。您应该制作一个模块函数,以便通过管道运算符轻松地与其他函数组合(|>)
:
module List =
let abc (xs: _ list) = 100
type Microsoft.FSharp.Collections.List<'T> with
member x.IsNotEmpty() = not (List.isEmpty x)
let xs = [1]
xs.IsNotEmpty