Как указать объединение предложения с общей единицей измерения в F#?

Есть ли способ определить ОУ, в пунктах которого используется общая единица измерения? например

type MyDU =
| A  of int<_>
| B  of float<_>

этот код не компилируется, но я могу указать обычную функцию, которая принимает числовое значение с общей единицей измерения:

let f (n : int<_>) = n * n;;
val f : int<'u> -> int<'u ^ 2>

учитывая, что каждое предложение union в конечном итоге является функцией, которая преобразует тип, указанный после of к частным типам MyDU.A или же MyDU.B Есть ли конкретная причина, почему он работает на определение функции, но не определение типа?

Есть ли способ сделать то, что я хочу сделать здесь? Если нет, я бы хотел знать, почему это тоже не сработает!

Спасибо,

1 ответ

Решение

Вам нужно использовать общий союз -

type MyDU<[<Measure>] 't> =
    | A  of int<'t>
    | B  of float<'t>

Это потому что int<m> отличается от int<s>,

Обратите внимание, что это не относится к типам измерений, это также относится к таким вещам, как использование объединения для создания списков и т. Д.

Другие вопросы по тегам