Haskell无法编译

问题描述 投票:-1回答:1

我是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只是忽略了它,什么也没写。

我在网上搜索了所有内容,但找不到任何解决方案。

请帮助,谢谢!

haskell haskell-stack ghci haskell-platform winghci
1个回答
0
投票

请注意,在命令中:

$ ghc --make helloworld
$ ghc --make helloworld.hs

美元符号不属于您输入的内容。相反,$是用于各种Unix shell(即Unix命令行)的“标准”提示,因此,它仅包含在指令中,以表明应在命令行中输入这些命令,而不是例如从GHCi内部。

我不知道您在哪里看到--make helloworld--make helloworld.hs变体,或在什么情况下它们会起作用。

唯一真正确实应该起作用的是在命令行(不在GHCi中!)输入的字符串ghc --make helloworldghc --make helloworld.hs。另外,--make参数是完全可选的(.hs文件后缀也是可选的,但包括它可能是一个好习惯)。

因此,为节省大量毫无意义的变化,请集中精力测试以下命令:

ghc helloworld.hs

键入Windows命令提示符或PowerShell窗口。如果您无法使用此功能,则没有其他变体可以使用。

这是我在新的Windows 10虚拟机中所做的。

  1. 我从this pagethis direct link下载了最小的Windows安装程序(268MB)。
  2. 我以正常用户身份而非管理员身份运行了安装程序可执行文件,并接受了所有默认安装选项。
  3. 从“开始”菜单中,启动命令提示符AKA“ cmd”,并确保我位于默认用户目录“ C:\ Users \ buhr”中。
  4. 使用每个程序员喜欢的编辑器记事本,我创建了一个包含单行的“ C:\ Users \ buhr \ helloworld.hs”文件:

    main = putStrLn "Hello, world!"
    
  5. 在提示符后的命令提示符窗口中,我输入了ghc helloworld.hs。窗口中的文本如下所示:

    enter image description here

  6. 然后我运行了helloworld可执行文件:

    enter image description here

两个需要注意的关键事项

首先,如果您的源文件包含module行,且模块名称不是Main,例如:

module MyModule where

然后,GHC将文件编译为模块,但不会生成可执行文件。其次,在未更改的源文件上重新运行GHC不会执行任何操作:

enter image description here

因为GHC仅在程序更改时才会重建程序。这两个因素的组合可能使GHC似乎什么也没做(即,它编译了您的模块,但是在您第一次运行它时却没有生成可执行文件,即使GHCi在您运行时也已经编译了您的模块)正在处理它),现在运行GHC不会执行任何操作,因为源文件没有更改。

© www.soinside.com 2019 - 2024. All rights reserved.