Поиск информации о параметрах статически разрешенных типов для встроенных функций Я наткнулся на определения различных примитивных операторов в FSharp.Core:
let inline (+) (x: ^T) (y: ^U) : ^V =
CheckedAdditionDynamic<(^T),(^U),(^V)> x y
when ^T : int32 and ^U : int32 = (# "add.ovf" x y : int32 #)
when ^T : float and ^U : float = (# "add" x y : float #)
// <snip>
when ^T : ^T = ((^T or ^U): (static member (+) : ^T * ^U -> ^V) (x,y))
Как видно из фрагмента выше ключевое слово when
используется в формате: when expr1 = expr2
для различных встроенных типов. Я предполагаю, что это своего рода эквивалент компилятора "если T = int использует код операции add.ovf, иначе if..., else do that".
Однако я не мог найти ни одной ссылки/объяснения для этого типа синтаксиса в документации F #. Может ли кто-то с некоторыми знаниями F # объяснить, что происходит в этом фрагменте выше?