私は通常、質問をより一般的なものにしようとしますが、今回は例題によって問題がより明確になると思います。私はF#も初めてなので、この段階で一般化しすぎるのは間違いかもしれません:)
私が達成したいのはBitConverter.ToXXX
、特定の型引数に対して適切な関数を返す関数を作成することです。これが私が試したものです:
let FromBytes<'a> : (byte[] * int -> 'a) =
match typeof<'a> with
| x when x = typeof<Int16> -> BitConverter.ToInt16
| x when x = typeof<UInt16> -> BitConverter.ToUInt16
| _ -> failwith "Unknown type"
ただし、コンパイラは型が一致することが保証されていることを理解していないため、これは失敗します。
私は回避策を見つけることができると確信していますが、関数の署名を変更せずにこれを機能させる方法はありますか?