избегать спецификации единиц измерения (1.0), возможно ли это? не является ли косвенно выводимым из объявления my_var: Vector3?
На самом деле 1,0 эквивалентно 1,0 <1>, поэтому вы не можете использовать его в контексте, где ожидается мера, отличная от 1 (безразмерная).
Однако вы можете использовать логический вывод, используя 1.0 <_>.
избегайте использования имени поля записи (как во втором примере). Разве имя поля записи, выводимой самим компилятором, не зависит от порядка?
Самая близкая вещь, о которой я могу подумать, была бы следующей:
type Vector3<[<Measure>] 'a> =
val X : float<'a>
val Y : float<'a>
val Z : float<'a>
new(x, y, z) = { X = x; Y = y; Z = z }
, который затем можно использовать как таковой:
let my_var = Vector3<m>(1.0<_>, 1.0<_>, 1.0<_>)