suave.io には、関数mapJsonがあります。
let mapJson (f: 'a -> 'b) =
request(fun r ->
f (fromJson r.rawForm)
|> toJson
|> Successful.ok
>=> Writers.setMimeType "application/json")
コンビネータを使用して同様にこれの非同期バージョンを作成する方法はありますか? 次のように手で書くことができます
let mapJsonAsync (f: 'a -> Async<'b>) (ctx: HttpContext) =
async {
let! x = f(fromJson ctx.request.rawForm)
let resp = Successful.ok (toJson x) >>= Writers.setMimeType "application/json"
return! resp ctx
}
ctx
しかし、中間値を明示的に定義する必要がない方がよいでしょう。