F#types的提供者,他们是如何工作的

在观看Don Symes的pdcvideo后,我不太明白types提供者http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

我是否正确理解这一点。 你可以为Twitter,Excel等现成的types提供商…

如果我有一个自定义的Xml结构,我需要为此实现自己的types提供程序,这与创build自己的自定义映射程序有何不同?

假设你在世界上有一些任意的数据实体。 对于这个例子,假设这是一个电子表格。

我们还可以说,您有一些方法可以获取/推断该数据的模式/元数据 – 也就是说,您可以知道types(例如双string和string)和关系(例如,此列表示“薪水”)和元数据(例如,此表单用于2009年6月的预算)。

types提供程序可以让你编写一种知道某种数据实体(例如电子表格)的“shim库”,并使用该库作为编译器/ IDE工具链的一部分,以便可以编写代码

mySpreadsheet.ByRowAndColumn.C4 

或者什么东西,并获得智能感知(自动完成)和工具提示(例如描述单元格C4为鲍勃薪水)和静态types(例如,它是一个双或一个string或任何它是)。 从本质上讲,这就为您提供了静态types对象模型的工具可供性,以及各种dynamic或代码生成系统的易用性,并对两者进行了一些改进。 “成本”是有人必须编写shim库(“types提供者”),但是许多这样的提供者是非常普遍的(例如说OData或Excel或WMI或其他),所以一小部分types的提供者库通过静态打字和一stream的工具支持,可以在您的编程语言中提供大量的世界数据。

这个架构是一个开放的编译器,provider-authors实现了一个小的接口,允许他们在编程环境中注入新的名字/types。 types提供者可能只是您传递给编译器的另一个库(您的项目中的引用, -r -ed),并带有额外的元数据,将其标记为参与开发的编译/ IDE /代码部分的types提供者。

我不知道在你的xml例子中是什么“自定义映射器”来绘制一个比较。

我明白,这是一个老问题,但现在types提供程序可用(如F#3.0发布)。 还有一个白皮书解释它。 而且我们有一个微软的代码,可以让你看到底下。

http://www.infoq.com/news/2012/09/fsharp-type-providers

types提供者使用F#的引用作为(有效的)编译器插件,可以在编译时根据元数据生成代码。

这允许您(例如)读取某些JSON,数据库模式或某些XSD或其他内容,然后生成F#类来对元数据表示的域进行build模。

在创build它们方面,我写了一些博客文章,可能从Ground Up的Type Providers开始有兴趣。