любой целый тип? int/uint/long и т.д.
Например для расчета факториала
let rec factorial n : bigint =
match n with
| x when x <= 1 -> 1I
| _ -> (n |> bigint) * factorial (n - 1)
На factorial 10UL компилятор ругается
Можно сртп, и тип не задавать let inline add x y = x+y Это магия такая, но работает
Если длинно, то типов сумм нет т.е. выразить что аргумент может быть любым из заданных например только целочисленных типов не получится. Сртп это такая компиляторная магия, при использовании функции в конкретном месте компилер выводит типы аргументов и для этих типов должны выполняться констрейнты (поддерживать операции которые используются в теле функции, в примере моем выше +)
``` let rec inline factorial n = match n with | x when x <= LanguagePrimitives.GenericOne -> LanguagePrimitives.GenericOne | _ -> n * factorial (n - LanguagePrimitives.GenericOne) ```
Не компилится из-за inline
Обсуждают сегодня