Оператор |>!
, который вы описываете, является стандартным шаблоном "map" , который может применяться только к любому типу "оболочки", а не только к async
. Если бы ваш return f r
был return! f r
, то у вас был бы стандартный шаблон «связывания» , который по соглашению должен быть записан как оператор >>=
, если вы определяете для него оператор.
И это хорошая идея, но с одним незначительным изменением. Вы записали его с асинхронным значением в качестве первого параметра и функцией в качестве второго параметра, но для того, чтобы использовать его, fetchAsync() |>! work
, требуется, чтобы эта функция была параметром first , например. let (|>!) f a = ...
. (Если вы посмотрите на то, как Скотт Влашин реализует это в первом примере, который я связал, он также помещает функцию в качестве первого параметра.) Кроме того, я думаю, что большинство программистов на F # предпочли бы не писать это как оператор, а как функция называется Async.map
, поэтому ее использование будет выглядеть так:
let result =
fetchAsync()
|> Async.map step1
|> Async.map step2
|> Async.map step3