これは型チェッカーの仕事であり、コンパイル時 (静的時) に自動的に行われます。型チェッカー (つまり、コンパイラ) は、関数によって作成されるすべての値が同じ型を持ち、その型がコンパイル時に静的に定義されることを保証します。コンパイル中に型エラーが発生するため、異なる型の値を作成する関数をコンパイルすることはできません。これは、静的に型付けされたすべての言語の必須のプロパティです。たとえば、Java、C、および C++ にも同じプロパティがあります。
したがって、おそらく、あなたが使用している用語は紛らわしいものです。実際にテストしようとしているのは、値が合計型の特定のバリアントに属している場合です。たとえば、次のようにnumbers
定義された合計型があるとします。
type t =
| Float of float
| Int of int
truncate
そして、次のように定義されたその関数をテストしたいと思います
let truncate = function
| Float x -> Int (truncate x)
| x -> x
常にInt
バリアントを返す場合は、次のように実行できます。
let is_float = function Float _ -> true | _ -> false
let is_int = function Int _ -> true | _ -> false
assert (is_int (truncate 3.14))