gpt4 book ai didi

f# - 使用组合器清理 Suave.io 中的 mapJsonAsync

转载 作者:行者123 更新时间:2023-12-02 20:44:06 24 4
gpt4 key购买 nike

在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 或中间值。

最佳答案

我看不出有什么办法可以解决这个问题。最后一个表达式可以稍微简化一下。

let mapJsonAsync (f: 'a -> Async<'b>) =
fun (ctx : HttpContext) ->
async{
let! result = f (fromJson ctx.request.rawForm)
return Successful.ok (toJson result ) ctx >>= Writers.setMimeType "application/json"
}

关于f# - 使用组合器清理 Suave.io 中的 mapJsonAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com