gpt4 book ai didi

f# - 值限制 : The type 'bar' has been inferred to have generic type

转载 作者:行者123 更新时间:2023-12-04 23:40:19 24 4
gpt4 key购买 nike

在下面的片段中,我不明白为什么我必须撰写 fg路函数foo确实以及为什么它不起作用的方式功能bar试图做到这一点。

let f a b = a,b
let g (a : 'a) (b : 'a) = a

let (>!) f1 f2 =
fun a b ->
let (x,y) = f1 a b
f2 x y

let foo = fun a b -> (f >! g) a b
let bar = f >! g

谁能给我解释一下,为什么 bar不管用?鉴于 foo也有泛型类型,对我来说没有意义。

最佳答案

foo是一个函数,而 bar是一个值。是的,它是一个函数类型的值,但仍然是一个值。有一个微妙的区别。

F# 编译器可以“看到”foo是一个函数,因为它看到 fun ->紧随其后 let .

您的 bar另一方面,是一个真值 - 通过调用不同的函数(运算符 >!)获得的结果。 F# 有一条规则(称为“值限制”)说(在日常术语中)值(与函数不同)不能具有泛型类型,除非明确指定泛型参数,从而有效地使其成为“类型函数”。 (它比这更复杂,阅读下面的链接以获取完整图片)

不过,这并不是 F# 特有的——其他非纯 ML 变体也有这一点。 Here是针对 F# 的这条规则的讨论,以及 here's SML 的讨论。

关于f# - 值限制 : The type 'bar' has been inferred to have generic type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39394254/

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