Я не знаю ни одного стандартного имени для функции такого типа. Тем не менее, есть два изменения, которые вы можете сделать в коде, который может быть несколько показателен. Во-первых, вы можете реализовать его без использования блока async
, просто используя f x
или возвращая async.Unit(None)
, то есть асинхронное вычисление, которое немедленно возвращает None
:
let traverseBindAsync (f: 'a -> Async<'b option>) (opt: 'a option) : Async<'b option> =
match opt with
| None -> async.Return None
| Some x -> f x
Теперь вы также можете переписать это, выполнив Option.map
на входе и используя async.Return(None)
в качестве значения по умолчанию, когда параметр ввода (а следовательно, и результат операции map
) равен None
:
let traverseBindAsync (f: 'a -> Async<'b option>) (opt: 'a option) : Async<'b option> =
opt |> Option.map f |> Option.defaultValue (async.Return None)
Я не думаю, что у него есть какое-либо имя, но вы можете думать о своей функции как Option.map
с определенным значением по умолчанию, когда вход недоступен.