相关疑难解决方法(0)

SML警告:使用空列表或NONE选项时,键入Vars Not Generalized

我不能为我的生活弄清楚为什么以下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中使用多态的事实有关,但我已经完全陷入了如何摆脱这些警告.

如果您有任何想法请帮助 - 提前谢谢!

sml smlnj

11
推荐指数
1
解决办法
4074
查看次数

价值限制

在OCaml中,您无法概括部分应用的curried函数("值限制").

价值限制的目的是什么?如果它不存在会发生什么不愉快?

ocaml

11
推荐指数
2
解决办法
1892
查看次数

SML 中作为返回值和值限制的多态函数

基本上,我想要一个函数来返回多态函数,如下所示:

有趣的 foo () = fn x => x

因此 foo 函数接受一个 unit 类型的值并返回一个多态恒等函数,编译器对此感到满意,它给了我:

val foo = fn : 单位 -> 'a -> 'a

但是一旦我实际调用 foo 函数,返回值就不是我期望的了

val it = fn : ?.X1 -> ?.X2

由于它所说的价值限制而无法概括,有什么帮助吗?提前致谢

sml smlnj

4
推荐指数
1
解决办法
724
查看次数

标签 统计

sml ×2

smlnj ×2

ocaml ×1