次の DU があるとします。
type Something =
| A of int
| B of string * int
今、私は次のような関数でそれを使用します:
let UseSomething = function
| A(i) -> DoSomethingWithA i
| B(s, i) -> DoSomethingWithB s i
それは機能しますが、DU を DoSomethingWith* 関数に渡すために、DU を分解する必要がありました。DoSomethingWithA を次のように定義しようとするのは自然なことだと思います。
let DoSomethingWithA (a: Something.A) = ....
しかし、コンパイラは型 A が定義されていないと不平を言います。
引数を古い int だけでなく、Something.A に制限したいというのは、F# の哲学と完全に一致しているように思えます。