f# - 什么是“和!” 在 FsToolkit.ErrorHandling 的验证计算表达式中,在 F#
问题描述
使用 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
}
和是什么意思!? 它看起来像让!被映射到 Result.bind,但我没有看到let 之间的不同行为!和和!
据我所见,它看起来像替换and!让!保持相同的行为。
我刚刚开始涉足计算表达式,事情开始变得有意义,虽然我真的不明白为什么我们在 F# 关键字(如 let)和实际函数(如 bind)之间有不同的命名法,所以它增加了一层混乱。所以这个问题的答案可能很明显:)
解决方案
这是F# 5.0 中引入的对“应用计算表达式”的新支持。
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
推荐阅读
- docker - Docker daemon windows 7:并发下载
- python - 使用 Jinja2 的 Python Mongodb 聚合
- visual-studio-2015 - TFS 2015 发布工件
- amazon - 如何通过解析器在 Appsync 上使用 batchWriteItem
- php - Laravel Blade:@stop VS @show VS @endsection VS @append
- excel - 根据条件更改单元格的颜色
- .net - 执行存储过程和读取返回值时出现“将数据类型 nvarchar 转换为 int 时出错”
- sql - 选择语句以获取字符串中的指定日期
- node.js - 使用 pg 加入节点 js 中的表时,我得到错误的结果
- node.js - 检测图像故障生成