F#类型提供商,他们如何工作

ter*_*tyl 39 f# type-providers

在观看Don Symes的pdc视频后,我不太了解类型提供商 http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

我是否正确理解这一点.你可以为Twitter,Excel提供现成的类型提供者......

如果我有自定义Xml结构,我是否需要为此实现自己的类型提供程序,这与创建自己的自定义映射器有何不同?

Bri*_*ian 40

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

我们还说你可以通过某种方式获取/推断该数据的模式/元数据 - 也就是说,你可以知道类型(例如双重与字符串)和关系(例如此列意味着"薪水")和元数据(例如,此表单用于2009年6月的预算).

类型提供程序允许您编写一种"填充库",它知道某种数据实体(例如电子表格)并将该库用作编译器/ IDE工具链的一部分,以便您可以编写类似的代码

mySpreadsheet.ByRowAndColumn.C4
Run Code Online (Sandbox Code Playgroud)

或其他东西,并获得智能感知(自动完成)和工具提示(例如将单元格C4描述为鲍勃的薪水)和静态类型(例如,它是一个双重字符串或字符串或其他任何东西).从本质上讲,这为您提供了静态类型对象模型的工具可用性,以及各种动态或代码生成系统的易用性,并对两者进行了一些改进.'成本'是有人必须编写填充库('类型提供者'),但许多这样的提供者是非常通用的(例如,说OData或Excel或WMI或诸如此类的东西),因此少数类型提供者库通过静态类型和一流的工具支持,可以在您的编程语言中提供大量的世界数据.

该体系结构是一个开放的编译器,其中provider-authors实现了一个小接口,允许它们在编程上下文中注入新的名称/类型.类型提供程序可能只是您传递给编译器的另一个库(项目中的引用,-r-ed),具有额外的元数据,将其标记为参与编译/ IDE/codegen开发部分的类型提供程序.

我不知道你的xml示例中的"自定义映射器"究竟是什么来绘制比较.


Roo*_*noy 9

我知道这是一个老问题,但现在可以使用Type提供程序(因为F#3.0已经发布).还有一份白皮书也在解释它.我们有一个来自微软的代码,可以让你深入了解.

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


mav*_*vnn 5

类型提供程序使用F#的引用作为(有效)编译器插件,可以在编译时基于元数据生成代码.

这允许您(例如)读入一些JSON,或数据库模式,或某些XSD或其他任何内容,然后生成F#类来模拟元数据所代表的域.

在创建它们方面,我写了一些博客文章,可能会从Ground Up的Type Providers开始.