如何编译具有ML兼容性的F#代码?

时间:2013-10-28 00:43:54

标签: f#

以下F#片段似乎只有在ML兼容模式下编译时才有效(运行here):

   let i = (1 lxor 5)

但是,我无法在Visual Studio 2012中的普通项目中编译它,或者在命令行中使用fsc.exe。我收到错误:

  

错误FS0039:未定义值或构造函数'lxor'

阅读F#规范说

  

虽然F#保留了几个OCaml关键字供将来使用,但/ mlcompatibility选项允许将这些关键字用作标识符。

然后将lxor列为一个此类运算符。所以我尝试了命令行fsc.exe Program.fs --mlcompatibility(版本11.0.60610.1),但它仍然得到同样的错误。

fsc.exe的文档似乎表明mlcompatbility选项仅忽略警告。我没有在VS中的fsc文档或项目选项中看到任何其他相关选项以启用兼容性。

关于F#/ ML兼容性的所有其他SO问题似乎与可以使用哪种语言结构有关,但我正在寻找的是如何在兼容模式下实际编译。我是否必须打开特定的命名空间,引用另一个程序集或执行其他操作?

更新

我也尝试在Ubuntu 13.04上的Mono上使用开源编译器fsharpc(F#3.0)。结果与fsc相同。

2 个答案:

答案 0 :(得分:1)

在非Windows系统上调用fscfsharpc)时,编译器选项位于源文件名之前。因此,调用它的正确方法是:

fsc -o:MyProgram.exe --mlcompatibility Program.fs

使用Visual Studio进行编译时,您可以进入项目的属性并将--mlcompatibility添加到Other flags框中:

Demonstrating how to add the 'mlcompatibility' flag to an F# project

答案 1 :(得分:1)

--mlcompatibility选项仅关闭警告,因此这看起来像回归。您可以通过搜索来源mlcompatibility https://github.com/fsharp/fsharp/search?q=mlCompatibility&type=Code的所有引用来验证这一点。