标准 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)