Я довольно новичок в F #, я пытаюсь написать некоторый код, который не различает числа с плавающей точкой и целые числа, и рассматривает их оба просто как "числа". Для начала я хочу простую функцию «добавить», которая будет добавлять два числа, где каждое число может быть целым или с плавающей точкой.
Это мой текущий подход, который не выглядит элегантным, возможно, из-за моего незнания тонкостей F #
type Number =
| Integer of int
| Float of float
let add (a: Number, b: Number) : Number =
match a with
| Integer(a) ->
match b with
| Integer(b) -> Integer(a + b)
| Float(b) -> Float(double a + b)
| Float(a) ->
match b with
| Integer(b) -> Float(a + double b)
| Float(b) -> Float(a + b)
Это работает, но для такого кода достаточно многопростая функция. В частности, если бы я хотел также функцию «вычитания», мне пришлось бы скопировать / вставить всю функцию и просто изменить «+» на «-», что кажется действительно неэффективным. Есть ли лучший способ сделать это в F #?