我是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只是忽略了它,什么也没写。
我在网上搜索了所有内容,但是找不到任何解决方案。
请帮助,谢谢!
答案 0 :(得分:0)
只需清楚一点,在命令中:
$ ghc --make helloworld
$ ghc --make helloworld.hs
美元符号不属于您输入的内容。相反,$
是各种Unix Shell(即Unix命令行)的“标准”提示,因此仅包含在说明中,这些命令应在命令行中输入这些命令,而不是,例如,从GHCi内部。
我不知道您在哪里看到--make helloworld
或--make helloworld.hs
变体,或者在什么情况下它们会起作用。
实际上唯一可以正常使用的是在命令行中输入的字符串ghc --make helloworld
和ghc --make helloworld.hs
(不在GHCi中!)。此外,--make
参数是完全可选的(.hs
文件后缀也是可选的,但包括它可能是一个好习惯)。
因此,要保存大量毫无意义的变化,请集中精力测试以下命令:
ghc helloworld.hs
键入Windows Command Prompt或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却无济于事,因为源文件没有更改。