我有一个名为Parser.fs
的文件,文件顶部有module Parser
。它汇编。我在同一目录Main
中有另一个模块,如下所示:
module Main
open Parser
let _ = //do stuff
我尝试用Main.fs
编译$ fsharpc Main.fs
(如果有另一种编译方式,则为idk)。第一个错误是module or namespace 'Parser' is not defined
,所有其他错误都是因为Parser
中的函数不在范围内。
我不知道这是否重要,但我确实尝试在Main
之后编译Parser
,但它仍然无效。我做错了什么?
答案 0 :(得分:3)
与Haskell不同,F#没有单独的编译。嗯,它在汇编级别,但不在模块级别。如果您希望两个模块位于同一个程序集中,则需要将它们一起编译:
fsharpc Parser.fs Main.fs
与Haskell的另一个不同之处:编译顺序很重要。如果你反转文件,它就不会编译。
或者,您可以将Parser编译为自己的程序集:
fsharpc Parser.fs -o:Parser.dll
然后在编译Main时引用该程序集:
fsharpc Main.fs -r:Parser.dll
那就是说,我建议使用fsproj
项目文件(类似于cabal文件)。减少头痛,控制更多。