Size: a a a

2021 July 10

SB

S B in F# Chat
Я же выше написал, что это не часть определения.
источник

SB

S B in F# Chat
Чето спор невнятный, я не понимаю что ты пытаешься доказать. Что функция «выхода» не являются частью монады как математического объекта (как и метод bind кстати) — с этим сложно спорить.
источник

И

Иван in F# Chat
Можно ли как-то задать параметр функции таким, что он принимает любой целый тип? int/uint/long и т.д.
Например для расчета факториала
let rec factorial n : bigint =
   match n with
   | x when x <= 1 -> 1I
   | _ -> (n |> bigint) * factorial (n - 1)
На factorial 10UL компилятор ругается
источник

P

Pavel in F# Chat
Можно сртп, и тип не задавать
let inline add x y = x+y
Это магия такая, но работает
источник

И

Иван in F# Chat
источник

P

Pavel in F# Chat
Если длинно, то типов сумм нет т.е. выразить что аргумент может быть любым из заданных например только целочисленных типов не получится. Сртп это такая компиляторная магия, при использовании функции в конкретном месте компилер выводит типы аргументов и для этих типов должны выполняться констрейнты (поддерживать операции которые используются в теле функции, в примере моем выше +)
источник

P

Pavel in F# Chat
У тебя n в factorial сравнивается с интом и поэтому тип n выводится как инт, а в принте ты передаеш бигинт литерал
источник

И

Иван in F# Chat
А как должно быть?
источник

P

Pavel in F# Chat
Сравни с бигинтом
источник

IC

Ilya L Che in F# Chat
И тогда у n будет тип BigInt.
источник

P

Pavel in F# Chat
С 1UL (это ж бигинт?)
источник

P

Pavel in F# Chat
Да, ну и норм
источник

И

Иван in F# Chat
Нет, тогда будет работать только с bigint
UL это uint64
источник

IC

Ilya L Che in F# Chat
> Можно ли как-то задать параметр функции таким, что он принимает любой целый тип? int/uint/long и т.д.
источник

I

Igor in F# Chat
Хм а можно ли вообще делать рекурсивные-inline функции 🤔
источник

P

Pavel in F# Chat
Если надо генерик факториал, то надо убрать явное задание типа функции : bigint, и как-то сравнивать с генерик 1, хз кактут
источник

P

Pavel in F# Chat
Но точно ли тебе нужен генерик факториал?
источник

И

Иван in F# Chat
Факториал просто для примера
источник

VK

Vladislav Khapin in F# Chat
```
let rec inline factorial n =
 match n with
 | x when x <= LanguagePrimitives.GenericOne -> LanguagePrimitives.GenericOne
 | _ -> n * factorial (n - LanguagePrimitives.GenericOne)

```
источник

P

Pavel in F# Chat
Интересно что под капотом у GenericOne ?
источник