将参数列表应用于柯里化函数

Apply a list of parameters to a curried function

简单的任务:我想要的只是一个将参数列表应用于柯里化函数的函数。

假设我们的函数是著名的 add 函数:

fun add a b = a + b;

现在我想要的只是一个将列表(比如 [1, 5])应用到 add 的函数。这看起来像:

apply add [1, 5];

这似乎比我想象的要难。我的尝试:

fun apply f ps = foldl (fn (p, f') => f' p) f ps;

但是这得到了这个有趣的可读错误消息:

Error: operator and operand don't agree [circularity]
  operator domain: 'Z * ('Z -> 'Y) -> 'Z -> 'Y
  operand:         'Z * ('Z -> 'Y) -> 'Y
  in expression:
    foldl (fn (p,f') => f' p)

现在,我的实现有什么问题? SML/NJ 有可能吗?

干杯并感谢提示和答案。

问题的根源在于,要使其正常工作,折叠函数的类型必须在折叠列表时发生变化,而这(希望很明显)是不可能的。

(fn (p, f') => f' p)中的"circularity"是因为f' p的类型必须和f'的类型相同。

我个人的直觉是你的尝试是不可能的,因为 apply add []apply add [1]apply add [1,2] 必须有不同的类型。
而且 apply add [1,2,3] 根本没有多大意义。

一个有用的练习可能是尝试写下 apply.

的类型