f# type-providers

Proveedores tipo F#, ¿cómo funcionan?



type-providers (3)

No obtengo exactamente los tipos de proveedores después de ver el video pdc de Don Symes http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

¿Entiendo esto correctamente? Puede obtener proveedores de tipos listos para Twitter, Excel ...

¿Qué pasa si tengo una estructura Xml personalizada, necesito implementar mi propio proveedor de tipos para eso y cómo es diferente de crear mi propio mapeador personalizado?


Digamos que tiene alguna entidad de datos arbitraria en el mundo. Para este ejemplo, digamos que es una hoja de cálculo.

Supongamos también que tiene alguna forma de obtener / inferir esquema / metadatos para esos datos, es decir, puede conocer tipos (por ejemplo, doble versus cadena) y relaciones (por ejemplo, esta columna significa ''salario'') y metadatos (por ejemplo, esta hoja es para el presupuesto de junio de 2009).

Los proveedores de tipos te permiten codificar una especie de ''biblioteca shim'' que conoce algún tipo de entidad de datos (por ejemplo, una hoja de cálculo) y usar esa biblioteca como parte del compilador / IDE toolchain para que puedas escribir código como

mySpreadsheet.ByRowAndColumn.C4

o algo así, y obtenga Intellisense (autocompletado) y tooltips (por ejemplo, describiendo la celda C4 como Salario para Bob) y tipeo estático (por ejemplo, que sea un doble o una cadena o lo que sea). Esencialmente, esto le proporciona las posibilidades de herramientas de los modelos de objetos de tipo estático con el aprovechamiento de facilidad de uso de varios sistemas dinámicos o de generación de códigos, con algunas mejoras en ambos. El ''costo'' es que alguien tiene que escribir la biblioteca shim (el ''proveedor de tipo''), pero muchos de estos proveedores son muy generales (por ejemplo, uno que habla OData o Excel o WMI o lo que sea) y un pequeño grupo de bibliotecas de proveedores de tipo hace que grandes cantidades de los datos del mundo estén disponibles en su lenguaje de programación con tipeo estático y soporte de herramientas de primera clase.

La arquitectura es un compilador abierto, donde los proveedores-autores implementan una pequeña interfaz que les permite inyectar nuevos nombres / tipos en el contexto de programación. Un proveedor de tipos puede ser simplemente otra biblioteca que pasa al compilador (una referencia en su proyecto, -r -ed), con metadatos adicionales que lo marcan como un proveedor de tipos que participa en las porciones de compilación / IDE / codegen del desarrollo.

No sé exactamente qué es un "mapeador personalizado" en su ejemplo xml para dibujar una comparación.


Entiendo que esta es una vieja pregunta, pero ahora los proveedores de Type están disponibles (a medida que se lanza F # 3.0). Hay un libro blanco que lo explica también. Y tenemos una caída de código de Microsoft que puede permitirle ver bajo el capó.

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


Los proveedores de tipo utilizan las citas de F # para actuar como complementos de compilador (efectivamente) que pueden generar código en base a metadatos en tiempo de compilación.

Esto le permite (por ejemplo) leer en algunos JSON, o un esquema de base de datos, o algo de XSD o lo que sea, y luego generar clases F # para modelar el dominio que representan los metadatos.

En términos de crearlos, escribí algunas publicaciones de blog que podrían ser de interés comenzando con Type Providers de Ground Up .