Я пытаюсь выяснить, как определить функцию, которая работает с несколькими типами параметров (например, int и int64). Насколько я понимаю, перегрузка функций невозможна в F # (конечно, компилятор жалуется). Возьмем для примера следующую функцию.
let sqrt_int = function
| n:int -> int (sqrt (float n))
| n:int64 -> int64 (sqrt (float n))
Компилятор, конечно, жалуется, что синтаксис недопустим (ограничения типов в сопоставлении с образцом не поддерживаются, кажется), хотя я думаю, что это иллюстрирует то, чего я хотел бы достичь: функция, которая работает с несколькими типами параметров и возвращает значение соответствующего типа. У меня есть ощущение, что это возможно в F #, используя некоторую комбинацию общих типов / вывод типов / сопоставление с образцом, но синтаксис ускользнул от меня. Я также пытался использовать:? оператор (динамические тесты типов) и когда * в блоке сопоставления с образцом, но это все равно вызывает ошибки всех видов.
Поскольку я довольно плохо знаком с языком, я вполне могу попытаться сделать что-то невозможное здесь, поэтому, пожалуйста, дайте мне знать, если есть альтернативное решение.