型のリストによって与えられた署名を持つ関数を生成する関数「gen」を書きたいとします。
let gen (sig:Type list) = ....
let sig = [ typeof<int>; typeof<int[]>; typeof<float> ]
let func = gen sig
then func is of type: int -> int[] -> float -> unit
私は2つの可能な解決策を考えました:
a) Reflect Emit を使用していますが、この方法で IntelliSense を機能させることができるかどうかはわかりません。Reflect Emit は新しい .net コードを作成するように見えますが、IntelliSense では認識されない可能性があるため、コンパイル時にコードが検証されない可能性があります。
b) 型プロバイダーを使用していますが、重すぎて実用的ではない可能性があります。
c) のようなジェネリックを使用するgen<'T1> (sig:Type list) : 'T2 -> unit
と、再帰呼び出しが必要になる場合がありますが、これを行う方法がわかりませんでした。
c) は軽量で、コンパイル時にチェックできるため、方法 c) をお勧めします。または、代替アプローチはありますか?