标准 ML:尝试获得函数的正确签名
Standard ML : trying to get the right signature of a function
我正在尝试使用此签名创建一个函数:
'a->'b->('a * 'b ->'b)->'b
我试过做这样的功能:
fun f x y z = z(x,y);
但它的签名不同,它是:
'a->'b->('a * 'b ->'c)->'c
我怎样才能使它符合要求?
有什么建议吗?
我认为至少 "artificial" 应该是这样的:
fun f x y g = g (x, g (x, y))
通过两次调用 g 确保 g 的 return 类型匹配其第二个参数的类型,一个调用的结果是另一个调用的第二个参数。
但一个更简单的解决方案,如果不是 "cheating",就是添加一个显式类型注释:
fun f x (y : 'b) g : 'b = g (x, y)
我正在尝试使用此签名创建一个函数:
'a->'b->('a * 'b ->'b)->'b
我试过做这样的功能:
fun f x y z = z(x,y);
但它的签名不同,它是:
'a->'b->('a * 'b ->'c)->'c
我怎样才能使它符合要求? 有什么建议吗?
我认为至少 "artificial" 应该是这样的:
fun f x y g = g (x, g (x, y))
通过两次调用 g 确保 g 的 return 类型匹配其第二个参数的类型,一个调用的结果是另一个调用的第二个参数。
但一个更简单的解决方案,如果不是 "cheating",就是添加一个显式类型注释:
fun f x (y : 'b) g : 'b = g (x, y)