ОБНОВЛЕННЫЙ ВОПРОС: Чтобы ответить на ваш обновленный вопрос - оператор +
является обобщенным c и использует ограничения члена stati c для работы с любым типом, который его поддерживает. Это теряется, если вы используете его в функции или присваиваете его переменной. Один из способов сохранить это свойство - определить функцию inline
.
let x1 = (+) // Type constrained, because it's not a function
let x2 a b = (+) // Type constrained, because it's not `inline`
let inline x3 = (+) // Error: only functions can be `inline`
let inline x4 a b = a + b // Works and you can use `x4` with strings and ints
ОРИГИНАЛЬНЫЙ ОТВЕТ: В вашей ситуации должно быть что-то еще, что вы не показываете в ваш вопрос. Если вы просто откроете новый файл сценария F #, сработает следующее:
let funInt (f:int -> int -> int) = f 1 2
let funStr (f:string -> string -> string) = f "hi" "there"
funInt (+)
funStr (+)
Теперь я не уверен, что еще у вас есть в коде, который вызывает ошибку. Я могу подумать об одной возможности, если вы переопределите оператор +
- если у вас есть новое определение, отличное от inline
, вы получите описанную ошибку:
let funInt (f:int -> int -> int) = f 1 2
let funStr (f:string -> string -> string) = f "hi" "there"
let (+) a b = a + b
funInt (+)
funStr (+)
Может Вы публикуете минимальный воспроизводимый пример, иллюстрирующий проблему?