gpt4 book ai didi

f# - 为什么类型推断在这里只适用于管道?

转载 作者:行者123 更新时间:2023-12-01 11:13:39 25 4
gpt4 key购买 nike

我有一段代码是这样的:

let! deliveries = 
async {
match Option.map (fun x -> x.Address) maybeUser with
| Some "" -> return []
| Some address -> return! fetchDeliveries address
| None -> return []
}

此类型推断在 x.Address 处失败。

但是,如果我用管道重新排序代码,它就可以工作:

let! deliveries = 
async {
match maybeUser |> Option.map (fun x -> x.Address) with
| Some "" -> return []
| Some address -> return! fetchDeliveries address
| None -> return []
}

这是为什么?

最佳答案

这是因为 F# 的编译器是单程、自上而下、从左到右的编译器。因此,在对文件进行类型检查时,表达式左侧的任何类型信息都可用于验证右侧。 |>的原因示例有效是因为左侧有一个明确的类型(在这种情况下是您定义的某种 User option 类型,它告诉 Option.map 是的,进来的项目是 User option ,所以 lambda您传入的函数必须是 User -> something else 类型,当然是。

关于f# - 为什么类型推断在这里只适用于管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56225238/

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