我不能为我的生活弄清楚为什么以下SML功能在我的作业问题中抛出警告:
fun my_func f ls =
case ls of
[] => raise MyException
| head :: rest => case f head of
SOME v => v
| NONE => my_func f rest
fun f a = if isSome a then a else NONE;
Run Code Online (Sandbox Code Playgroud)
每当我使用以下测试函数调用my_func时:
my_func f [NONE, NONE];
my_func f [];
Run Code Online (Sandbox Code Playgroud)
我总是收到警告:
警告:由于值限制而未通用的类型变量被实例化为虚拟类型(X1,X2,...)
每当我传入包含至少一个SOME值的选项列表时,都不会抛出此警告.我知道它必须与我在函数currying中使用多态的事实有关,但我已经完全陷入了如何摆脱这些警告.
如果您有任何想法请帮助 - 提前谢谢!
基本上,我想要一个函数来返回多态函数,如下所示:
有趣的 foo () = fn x => x
因此 foo 函数接受一个 unit 类型的值并返回一个多态恒等函数,编译器对此感到满意,它给了我:
val foo = fn : 单位 -> 'a -> 'a
但是一旦我实际调用 foo 函数,返回值就不是我期望的了
val it = fn : ?.X1 -> ?.X2
由于它所说的价值限制而无法概括,有什么帮助吗?提前致谢