Есть ли причина, по которой я могу использовать универсальную функцию с аргументами другого типа, когда передаю ее как локальное значение, а не как параметр?Например:
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')
Это второй раз, когда я сталкиваюсь с этой проблемой.
Почему он ведет себя так, он не должен быть одинаковым, если функция является локальным значением или передается в качестве параметра?
Есть ли способ сделать это без дублирования функции?
Хак, может быть, с использованием явных ограничений типа, встроенной магии, цитат?