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