Functional programming traverseBind是公认的FP概念吗?
我有一个函数f:'a->Async,而不是最后的f的Async。但是如果我将遍历与f一起使用,结果是Async我不知道像这样类型的函数有任何标准名称。但是,您可以对代码做两个更改,这可能会有所启示。首先,您可以在不使用异步块的情况下实现它,只需使用f x或返回async.UnitNone,即立即返回None的异步计算:Functional programming traverseBind是公认的FP概念吗?,functional-programming,f#,Functional Programming,F#,我有一个函数f:'a->Async,而不是最后的f的Async。但是如果我将遍历与f一起使用,结果是Async我不知道像这样类型的函数有任何标准名称。但是,您可以对代码做两个更改,这可能会有所启示。首先,您可以在不使用异步块的情况下实现它,只需使用f x或返回async.UnitNone,即立即返回None的异步计算: 我认为这没有任何名称,但您可以将函数视为Option.map,在输入不可用时具有特定的默认值。我不知道此类函数的任何标准名称。但是,您可以对代码做两个更改,这可能会有所启示。首先
我认为这没有任何名称,但您可以将函数视为Option.map,在输入不可用时具有特定的默认值。我不知道此类函数的任何标准名称。但是,您可以对代码做两个更改,这可能会有所启示。首先,您可以在不使用异步块的情况下实现它,只需使用f x或返回async.UnitNone,即立即返回None的异步计算: 我不认为它有任何名称,但当输入不可用时,您可以将函数视为Option.map,并使用特定的默认值
module Option =
let traverseBindAsync (f: 'a -> Async<'b option>) (opt: 'a option) : Async<'b option> =
async {
match opt with
| None -> return None
| Some x -> return! f x
}
let traverseBindAsync (f: 'a -> Async<'b option>) (opt: 'a option) : Async<'b option> =
match opt with
| None -> async.Return None
| Some x -> f x
let traverseBindAsync (f: 'a -> Async<'b option>) (opt: 'a option) : Async<'b option> =
opt |> Option.map f |> Option.defaultValue (async.Return None)