有没有“让!”的替代方案?支持函数链?
我目前有这个:
async {
let! result = token |> queryDay
result |> toTransactions
}
Run Code Online (Sandbox Code Playgroud)
但是,我想将上面的代码合并成这样的:
async {
// NOTE: Async.Await isn't a thing
let result = token |> queryDay |> Async.Await |> toTransactions
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这一目标?
从你的例子中,我假设:
queryDay : 'a -> Async<'b>
toTransactions : 'b -> Async<'c>
Run Code Online (Sandbox Code Playgroud)
像这样链接 monadic 函数被称为"bind"。这是 monad 的核心操作,它的本质。事实上,该let!
构造被脱糖为对 的调用async.Bind
, 也是如此do!
。
不幸的是,F# 标准库不提供bind
for的内置独立实现Async
。但有一个在FSharpx
你可以使用:
open FSharpx.Control
async {
let! result = token |> queryDay |> Async.bind toTransactions
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想使用FSharpx
,您可以通过委托给计算构建器轻松地自己制作一个:
module Async =
let bind f a = async.Bind(a, f)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
58 次 |
最近记录: |