2010-01-27 47 views
4
返回值和值的限制

基本上,我想有一个函数返回一个多态函数,有些事情是这样的:多态函数作为SML

乐趣富()= FN X => X

所以foo的函数以类型单位的值,并返回一个多态同一性功能 和编译器高兴的是,它给了我:

VAL富= FN:单位 - >“A - >”一个

但一旦我真的调用foo函数,返回值是不是我所期待

VAL IT = FN:.X1 - > .X2

,因为值的限制,它说,任何帮助的不能一概而论???在此先感谢

回答

4

由于技术原因,您不允许概括(即使多态)函数调用的结果。调用的结果必须具有单态类型。如果不是这种情况下,你可以通过下面的脏招颠覆式系统:

  1. 呼叫ref []并取回型forall 'a . 'a list ref
  2. 插入一个字符串列表。
  3. 删除功能

,并有你:你现在正在执行任意的字符串作为密码的内容。不好。

通过坚持ref []返回的值是单形的,您可以确保它可以用作字符串列表或函数列表,但不能同时用作两者。所以这是我们为类型安全付出的代价的一部分。