当我将其作为本地值传递但不作为参数传递时,我是否可以使用具有不同类型参数的泛型函数?例如:
let f = id
let g (x,y) = (f x, f y)
g ( 1, '2')
Run Code Online (Sandbox Code Playgroud)
工作正常,但如果我尝试将函数作为参数传递
let g f (x,y) = (f x, f y)
g id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)
它失败,因为它采用版本f <int>并尝试将其应用两次.
我找到了一个解决方法,但它迫使我写两次我正在传递的函数:
let g f1 f2 (x,y) = (f1 x, f2 y)
g id id ( 1, '2')
Run Code Online (Sandbox Code Playgroud)
这是我第二次遇到这个问题.
为什么它以这种方式运行,如果函数是本地值或者它作为参数传递,它不应该是相同的?
有没有办法在不重复功能的情况下执行此操作?
一个黑客,可能使用显式类型约束,内联魔术,引用?