アセンブリFSharp.Data.TypeProviders4.3.0.0のF#型プロバイダーを使用すると、非常に単純なF#ライブラリで型を作成できます。その後、アセンブリFSharp.Data.TypeProvidersに依存することなく、これらの型を使用できます。それはかなり甘いです!次に例を示します。
TryTypeProvidersというF#ライブラリプロジェクトを作成しました。私はこれを.fsに入れました:
module TryTypeProviders
type Northwind = Microsoft.FSharp.Data.TypeProviders.ODataService
その後、C#プロジェクトのF#ライブラリを使用できるようになります。
public static void Main()
{
var c = new TryTypeProviders.Northwind();
foreach (var cust in c.Customers)
Console.WriteLine("Customer is: " + cust.ContactName);
Console.ReadKey(true);
}
このようなタイププロバイダーを作成する方法の実用的な例を見つけることができませんでした。FSharpx.TypeProvidersのタイププロバイダーには、C#からアクセスできません。私の推測では、それらは消去されたタイプであり、生成されたタイプではありません。私はまだどちらがどちらかについて少し曖昧ですが、ここでは次のように定義されています:
- 生成された型は、型プロバイダーを使用するアセンブリに埋め込まれる実際の.NET型です(これは、sqlmetalなどのコード生成ツールをラップする型プロバイダーが使用するものです)
- 消去された型は、コードがコンパイルされるときに他の型によって表されるシミュレートされた型です。
MSDNチュートリアルに記載されているF#3.0サンプルパックのサンプルが機能していません。それらはビルドされますが、使用しようとするとエラーが発生します。
open Samples.FSharp.RegexTypeProvider
type PhoneNumberRegEx = CheckedRegexProvider< @"(?<AreaCode>^\d{3})-(?<PhoneNumber>\d{3}-\d{4}$)">
open Samples.FSharp.MiniCsvProvider
type csv = MiniCsvProvider<"a.csv">
これは2011年3月に最後にリリースされましたが、VisualStudio2012に付属しているタイププロバイダーの最終バージョンはまだ反映されていないと思います。
F#タイププロバイダーは優れたテクノロジーのように見えますが、それらを構築するための支援が必要です。どんな助けでも大歓迎です。