我希望能够定义一个通用的 F# 类型,但具有指定类型的重载。特别是,我想定义一个图表绘图类型,它采用任何数字类型的 X 序列和 Y 序列序列。但是,如果没有提供 X,我想提供一个自动的整数范围。问题是这打破了我的类型的通用性。对于下面的示例代码,当我输入重载时,出现以下错误:Warning 2 This construct causes code to be less generic than indicated by the type annotations. The type variable 'T has been constrained to be type 'int'.
type Plot(X : seq<'T>, Y : seq<seq<'U>>) =
// Other plotting code
do printfn "I am a plotter"
// Constructor overload for when no Xs are provided
new (Y : seq<seq<'U>>) = let Xs = List.init (Seq.length Y) id
Plot(Xs, Y)
此外,'U
已被限制为 type obj
。有什么办法可以做到这一点而不采取obj
强制措施double
吗?我觉得我错过了关于类型系统的一些基本知识......