将OCaml转换为F#:将OCaml报价添加和报价扩展器转换为F#

时间:2012-05-02 23:08:28

标签: f# ocaml

我正在将基于OCaml的几个模块转换为F#,并且遇到报价扩展器的OCaml''Quotation.add''编译器指令。

  

引用扩展器是用OCaml编写的函数。打电话给   Camlp4库函数''Quotation.add''添加引号   膨胀器。

Camlp4 - Tutorial, Ch. 3

在F#书籍,F#网站,Google和这里搜索报价扩展器和''Quotation.add''编译器指令之后,我得到的答案是否定的。

有人可以确认F#不支持OCaml''Quotation.add''编译器指令的概念或OCaml报价扩展器的概念。

修改

注意:我刚刚了解到Camlp4是OCaml的预处理器 - 漂亮打印机,当我提出问题时,我认为它是OCaml的独立库。现在它是有道理的。

1 个答案:

答案 0 :(得分:10)

你是对的 - camlp4库不适用于F#,所以我担心你需要使用另一种方法来重新实现F#中所需的功能。

一般情况下,您可以使用F#中的一些相关技术(但如果不了解具体问题,很难判断它们是否对您有用):

  • F# Quotations允许您操作F#代码,但编译能力有限(很好,即将F#转换为SQL,JavaScript或GPU)
  • F# CodeDom(来自F#PowerPack)允许您使用F#编译器生成代码并进行编译,但您可以生成代码作为文本或使用.NET面向对象的样式。
  • T4 Templating是一个.NET模板机制,虽然上次检查时,它不支持F#(但我认为Mono版本可能有用)
  • F# Type Providers(感谢kvb)可以通过F#插件为编译器生成类型。这会处理你使用camplp4生成某些类型以便稍后使用的情况(即来自较短的规范),但是如果你需要生成一些代码它们的用途有限