@TimC, вы правы, он работает только с одним типом без встроенного, какой бы тип ни использовался первым, кажется, что тип выводит использует его в первый раз, чтобы исправить типы для всего приложения
аюсь определить универсальный оператор сложения для класса-оболочки. Пока у меня есть это: (упрощенно из фактического кода)
type Wrap<'a> =
| Wrap of 'a
static member inline (+) (Wrap x, Wrap y) = Wrap (x + y)
let inline addSelf x = x + x
и действительно это работает:
let i = addSelf (Wrap 1) // returns Wrap 2
let f = addSelf (Wrap 1.) // returns Wrap 2.0
но следующая альтернатива addSelf не компилируется
let inline addSelf' (Wrap x) = (Wrap x) + (Wrap x) // compile error
выдача ошибки FS0193: параметру типа не хватает ограничения 'когда (^ a или ^? 15169): (статический член (+): ^ a * ^? 15169 -> ^? 15170)'
Почему более ограниченный addSelf 'не работает, когда addSelf работает нормально? Спасибо!