F# 中 'validation' 的奇怪类型推断问题

odd type inference issue with 'validation', in F#

使用库 'FsToolkit.ErrorHandling'

和以下代码:

let f x =
    if x % 2 = 0 then Ok $"even {x}" else Error $"odd {x}"

let xx =
    validation {

        let! a = f 1
        and! b = f 2
        and! c = f 3

        return $"{a} {b} {c}"
    }

printfn $"{xx.GetType()}"

输出是一个

Result<string, string list>

或者,更具体地说:

Microsoft.FSharp.Core.FSharpResult2[System.String,Microsoft.FSharp.Collections.FSharpList1[System.String]]

但是IDE(骑手)有不同的看法:

出于某种原因,这是预期的行为吗?或者它可能是一个错误?

Validation<'a, 'err>Result<'a, 'err list> 的类型别名:

https://github.com/demystifyfp/FsToolkit.ErrorHandling/blob/f5019f10c4418426a2e182377be06beecd09876b/src/FsToolkit.ErrorHandling/Validation.fs#L3

这不会创建新类型,但会创建一种引用现有类型的新方法,这意味着它们可以互换使用。