给出以下定义
let fn (id: int) (_:string) = id
我可以创建一个部分应用的功能
let fnPartial = fn 1
但是将类型更改_
为非密封类型,例如IEnumerable
let fn (id: int) (_:IEnumerable) = id
导致编译错误
价值限制。值 'fnPartial' 已被推断为具有泛型类型 val fnPartial : ('_a -> int) when '_a :> IEnumerable添加类型注释。(使用内置 F# 编译器)
提出了一个错误,但以以下响应关闭
是的,这是设计使然 - IEnumerable 在字符串所在的位置没有密封,这会导致触发值限制
解决方法是添加类型注释
let fn (id: int) (_:IEnumerable ) = id
let fnPartial<'a> = fn 1
有人可以解释
- 问题的症结是什么
- 添加类型注释如何解决问题