我已经被困在这几天了......抱歉这个问题,但我只是F#的初学者.由于有很多关于类型提供者的讨论,我决定构建一个并写一篇关于它的论文.当我开始时,我不知道什么类型的提供者.现在我有了一些想法,我已经构建了一个简单的CSV类型提供程序,但我在评估中缺乏参数,在其他语言中用这样的东西花多少时间和工作.到目前为止,我还没有找到任何关于它的线索,只是该类型提供程序是F#3.0中的一个功能.有人可以帮帮我吗?
Tom*_*cek 12
据我所知,唯一直接实现类型提供者的其他语言是Idris.请参阅有关类型提供程序的Idris文档.有一些例子,包括David Christiansen的GitHub回购中的SQL类型提供程序.作为一种依赖类型的语言,类型提供者的外观与F#完全不同 - 它们基本上是使用%provide命令调用的IO monad中的计算- 因此与F#设计相比,它们与其他语言相比更加统一.
还有其他与类型提供程序相关的语言功能.
这包括各种模板系统(例如模板Haskell和用于OCaml的camplp4).这些缺少某些类型提供程序功能(它们实际上生成代码,因此您无法提供"无限大小"类型,并且它们不与工具集成).
有许多用于Java和C#等语言的代码生成工具(LINQ to SQL使用代码生成和各种UI框架也是如此),但同样,这缺乏语言集成,只能支持相对较小的类型.
另一个相关的事情是元编程,例如多阶段编程,但据我所知,这主要是学术性的,没有可靠的语言实现这一点.
很难说这些类型提供者中的哪一个接近.对我来说,类型提供者的基本特征是我在使用它时作为开发人员获得的快速反馈(对于某些人来说,这意味着在开发期间即时更新模式) - 而这正是代码生成工具通常不会做的事情.另一种 - 能够懒惰地提供无限数量的类型对于某些类型的提供者是有用的,但不是全部 - 因此例如JSON,XML或CSV可以由代码生成工具合理地处理.
Java 通过新项目Manifold具有与类型提供程序几乎相同的东西。
Manifold 将其称为Type Manifold,而不是Type Provider。尽管 Manifold 为 Java 提供了一些其他功能,但 Type Manifold API 是构建所有其他功能的基础。与 F# 类似,Java 使用 Manifold 可以对几乎任何类型的结构化数据进行类型安全的访问,从 SQL 到 CSV,再到 JSON 到 Javascript……只要实现了类型流形。IntelliJ IDEA 通过Manifold Plugin为 Manifold 提供全面支持。
干杯。