【问题标题】:what is 'and!' in the validation computation expression with FsToolkit.ErrorHandling, in F#什么是“和!”在 FsToolkit.ErrorHandling 的验证计算表达式中,在 F#
【发布时间】:2021-02-17 04:12:52
【问题描述】:

使用 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
        }

和!是什么意思?看起来 let! 被映射到 Result.bind,但我没有看到 let!and! 之间的不同行为p>

据我所见,似乎用 let! 替换 and! 保持相同的行为。

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

【问题讨论】:

    标签: f# computation-expression


    【解决方案1】:

    这是 F# 5.0 中引入的对 "applicative computation expressions" 的新支持。

    let!and! 之间的区别在于let! 允许一个值依赖于先前的结果,而and! 不允许。这对于您的计算是 applicative 但不是完整的 monad 的情况很有用,或者当您希望在并行计算中执行独立步骤时。

    例如,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多