4

条項が一般的な測定単位を使用するDUを定義する方法はありますか?例えば

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

このコードはコンパイルされませんが、ジェネリック測定単位で数値を受け取る通常の関数を指定できます。

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

of各ユニオン句が最終的には後で指定された型をプライベート型に変換する関数であることを考えると、それが関数定義では機能するが型定義では機能しない特別な理由がありますかMyDU.AMyDU.B

ここでやりたいことをする方法はありますか?そうでなければ、なぜそれもうまくいかないのか知りたいです!

ありがとう、

4

1 に答える 1

11

一般的なユニオンを使用する必要があります-

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

これは、aが。int<m>とは異なるためint<s>です。

これはメジャータイプに固有のものではなく、ユニオンを使用してリストを作成する場合などにも適用されることに注意してください。

于 2012-08-08T10:33:10.630 に答える