我是Haskell的初学者,我创建了一个helloworld.hs文件,其中包含以下行:
main = putStrLn "hello, world"
[当我尝试使用--make helloworld进行编译时,它不会在终端中写入任何内容,也不会编译或创建任何.exe或.o文件。我尝试了很多版本:
$ ghc --make helloworld
$ ghc --make helloworld.hs
ghc --make helloworld
ghc --make helloworld.hs
--make helloworld
--make helloworld.hs
但是这些似乎都不起作用...我什至尝试使用--version查找版本,但GHCi只是忽略了它,什么也没写。
我在网上搜索了所有内容,但找不到任何解决方案。
请帮助,谢谢!
请注意,在命令中:
$ ghc --make helloworld
$ ghc --make helloworld.hs
美元符号不属于您输入的内容。相反,$
是用于各种Unix shell(即Unix命令行)的“标准”提示,因此,它仅包含在指令中,以表明应在命令行中输入这些命令,而不是例如从GHCi内部。
我不知道您在哪里看到--make helloworld
或--make helloworld.hs
变体,或在什么情况下它们会起作用。
唯一真正确实应该起作用的是在命令行(不在GHCi中!)输入的字符串ghc --make helloworld
和ghc --make helloworld.hs
。另外,--make
参数是完全可选的(.hs
文件后缀也是可选的,但包括它可能是一个好习惯)。
因此,为节省大量毫无意义的变化,请集中精力测试以下命令:
ghc helloworld.hs
键入Windows命令提示符或PowerShell窗口。如果您无法使用此功能,则没有其他变体可以使用。
这是我在新的Windows 10虚拟机中所做的。
使用每个程序员喜欢的编辑器记事本,我创建了一个包含单行的“ C:\ Users \ buhr \ helloworld.hs”文件:
main = putStrLn "Hello, world!"
在提示符后的命令提示符窗口中,我输入了ghc helloworld.hs
。窗口中的文本如下所示:
然后我运行了helloworld
可执行文件:
两个需要注意的关键事项:
首先,如果您的源文件包含module
行,且模块名称不是Main
,例如:
module MyModule where
然后,GHC将文件编译为模块,但不会生成可执行文件。其次,在未更改的源文件上重新运行GHC不会执行任何操作:
因为GHC仅在程序更改时才会重建程序。这两个因素的组合可能使GHC似乎什么也没做(即,它编译了您的模块,但是在您第一次运行它时却没有生成可执行文件,即使GHCi在您运行时也已经编译了您的模块)正在处理它),现在运行GHC不会执行任何操作,因为源文件没有更改。