J'ai des problèmes avec les unités de mesure F # lorsque je définis un opérateur qui a un paramètre avec une unité générique de mesure définie en termes d'unité de mesure générique d'un autre paramètre. Par exemple:F # unités génériques dans les paramètres définis les uns par rapport aux autres
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))
Ici, y
est défini dans <'a/'b>
, où <'a>
est l'unité de x
. Je m'attends à ce que le type de (|/)
soit int64<'a> -> int64<'a/'b> -> Quotient<'b>
, mais le compilateur me dit que le type est x:int64<'b> -> y:int64 -> Quotient<'b>
.
Je veux utiliser ceci pour les conversions de type où les nombres décimaux ne sont pas possibles. Mon but était de créer des opérateurs pour travailler avec Quotients au lieu de mettre la logique pour calculer le reste dans chaque conversion de type. Est-il possible d'atteindre cet objectif, ou devrais-je procéder différemment à mes conversions de type?