У меня возникают проблемы с единицами измерения F # при определении оператора, который имеет параметр с общей единицей измерения, определенной в терминах общей единицы измерения из другого параметра. Например:F # общие единицы в параметрах, определяемых друг другом
type Quotient<[<Measure>]'b> =
| Divisible of int64<'b>
| Remaindered of int64<'b> * int64<'b>
let (|/) (x: int64<'a>) (y: int64<'a/'b>) =
let q = x/y
if q * y = x then Divisible q else Remaindered (q, x - (q * y))
Здесь y
определяется в <'a/'b>
, где <'a>
является единицей x
. Я ожидаю, что тип (|/)
будет int64<'a> -> int64<'a/'b> -> Quotient<'b>
, однако компилятор говорит мне, что тип x:int64<'b> -> y:int64 -> Quotient<'b>
.
Я хочу использовать это для преобразования типов, где десятичные числа невозможны. Моя цель состояла в том, чтобы создать операторов для работы с Quotients вместо того, чтобы поместить логику для вычисления остатка в каждом преобразовании типа. Возможно ли достичь этой цели, или я должен идти о моих преобразованиях по-другому?