奇怪的FSharpLint警告

时间:2016-11-09 09:20:56

标签: f#

我正在尝试重新实现List.distinct功能:

let inline distinct list =
    let folder curr = function
        | [] -> [curr]
        | l -> if List.contains curr l then l else curr :: l
    List.foldBack folder list []
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我得到了一个lint警告说

  

List.foldBack f x []可能会被重构为x

然而,这对我来说没有多大意义,因为这导致我返回原始列表而不执行不同的逻辑。

这是FSharpLint的错误吗?

1 个答案:

答案 0 :(得分:6)

显然这是一个错误的规则。看一下FSharpLint default configuration的摘录:

List.fold f x [] ===> x
Array.fold f x [||] ===> x
List.foldBack f x [] ===> x
Array.foldBack f x [||] ===> x

此处foldfoldback的内容相同,因此它并不遵循两者之间签名的差异。

应翻转初始状态和集合参数的顺序,请参阅foldback定义中使用的"mnemonic" approach