を生成するReflection.Emitを使用しました。、私はそれが<code>Reflection.emit</code>使用して、F#でDUを生成することが可能であった場合(または何かをそこにあります)知っているように、あるいは、すでにDUを定義し、新しい例を追加します識別型共用体
私は、MSDNのWebサイトを見てきた、と私は私にできることすべては労働組合の例を取得したり、組合の例を作成することであることが分かりました。 FSharpValue.MakeUnion
を使用するか、Expr.NewUnionCase
との引用を使用して作成してください。
私は、このメソッドを使用して持っている問題は、私は私が作った組合の例は、同じDUに属しているような方法でそれらを結合することができるだろうかありますか?たぶんそれはこの問題を解決する道ではない。その場合、私はどのようにDUを動的に生成するでしょうか?
P.S:目的はタイププロバイダの内部でDUを生成することです。私は間違っていないよ場合、これは、.dllファイルにコンパイルするとき、私は、スクリプトファイル内のTypeProviderによって生成されたDUにアクセスできるようになることを、意味します。つまり、私はDUのインスタンスに対してパターンマッチングを適用することができ、DUによって提供される型安全性(例えば、パターンマッチングにおけるすべてのケースの徹底性)を得ることができることを意味する。
ご説明いただきありがとうございます。私は現在あなたが提案したことをやろうとしていますが、F#コンパイラサービスを使用してどのようにDUを生成するかはわかりません。私が見つけた唯一の事は、次のCompiler.SourceCodeServices.FSharpUnionCaseですが、私の理解では、既存の共用体のケースに関する情報しか得ることができません。私は試していますが、コンパイラサービスを使用してどのような型を生成することができないのか分かりません。 – Leleutch
ドキュメントの「F#コンパイラのホスティング」を参照してください。あなたはそれにコードを与え、それを使用する方法に応じて通常または動的アセンブリのいずれかを作成します。あなたがしなければならないことは、あなたのdiscrminated unionを表すコードを与えることだけです。 – akara
おお、私は見ているので、実際に何かかわいい印刷物のように見えます。もちろん、すでに異なるタイプ(type1 .. typeNなど)が定義されている場合は、それらをDUのコードに追加することができ、DUが実際にバインドされることを意味します。今、私は分かる。ありがとう – Leleutch