F# 什么是';还有';在带有FsToolkit.ErrorHandling的验证计算表达式中,在F中#

F# 什么是';还有';在带有FsToolkit.ErrorHandling的验证计算表达式中,在F中#,f#,computation-expression,F#,Computation Expression,使用FsToolkit.ErrorHandling并查看此示例时: testCase "Happy Path Result" <| fun () -> let actual : Validation<int, string> = validation { let! a = Ok 3 and! b = Ok 2 and! c = Ok 1 re

使用FsToolkit.ErrorHandling并查看此示例时:

testCase "Happy Path Result" <| fun () ->
        let actual : Validation<int, string> = validation {
            let! a = Ok 3
            and! b = Ok 2
            and! c = Ok 1
            return a + b - c
        }
testCase“快乐路径结果”
让实际值:验证=验证{
让我们来看看!a=Ok 3
和!b=Ok 2
和!c=Ok 1
返回a+b-c
}
和的意思是什么!?看起来像是让我走了!映射到Result.bind,但我看不到let之间有任何不同的行为!还有

就我所见,它看起来像是在更换和更换!用let!保持同样的行为


我刚刚开始涉足计算表达式,事情开始变得有意义了,尽管我真的不明白为什么我们在F#关键字(如let)和实际函数(如bind)之间有不同的命名法,所以这增加了一层混乱。因此,答案可能很明显:)

这是F#5.0中引入的对的新支持

let之间的区别
那是
让我来允许值取决于先前的结果,而
没有。这对于您的计算是一个单子,但不是一个完整的单子,或者您希望并行执行计算中的独立步骤的情况非常有用

例如,使用
let您可以编写以下代码:

let! a = Ok 3
let! b = Ok (2 * a)   // Allowed: value of b depends on a
let! a = Ok 3
and! b = Ok (2 * a)   // Not allowed: value of b depends on a
但你不能这样写:

let! a = Ok 3
let! b = Ok (2 * a)   // Allowed: value of b depends on a
let! a = Ok 3
and! b = Ok (2 * a)   // Not allowed: value of b depends on a