【发布时间】:2011-08-27 09:16:24
【问题描述】:
当我将泛型函数作为本地值传递时,我可以使用具有不同类型参数的泛型函数,但在作为参数传递时不能使用,这有什么原因吗? 例如:
let f = id
let g (x,y) = (f x, f y)
g ( 1, '2')
工作正常,但如果我尝试将函数作为参数传递
let g f (x,y) = (f x, f y)
g id ( 1, '2')
它失败了,因为它采用版本 f 并尝试应用它两次。
我找到了一种解决方法,但它迫使我写两次我传递的函数:
let g f1 f2 (x,y) = (f1 x, f2 y)
g id id ( 1, '2')
这是我第二次遇到这个问题。
为什么它会这样,如果函数是本地值或作为参数传递,它不应该是相同的?
有没有办法在不复制函数的情况下做到这一点?
一个 hack,可能使用显式类型约束、内联魔法、引号?
【问题讨论】: