2014-12-25 111 views
5

我无法弄清楚如何让WinGHCi加载并编译我的.hs文件。获取源文件在Haskell编程中运行(WinGHCi)

我有一个文件,C:\Users\Haskell\Source\hello.hs,仅包含以下行:

main = putStrLn "Hello, world!" 

如果在Prelude>提示,我跑

:cd C:\Users\Haskell\Source\ 

没有任何反应,这我假设手段该命令成功。然而,当我尝试运行时,我得到一个“[1]编译主。好,模块加载:主”消息。我的提示,然后从“前奏”,以“*主”的变化和I型:

ghc -o hello hello.hs 

之后,我将获得一系列的错误谈论如何GHC,O,你好,你好,和HS是“不在适用范围。”

我在正确的目录中。为什么我的程序不能运行?

我的一个问题是我无法浏览目录。我知道:!dir列出了这些文件,并且我位于正确的目录中,但:load hello.hs仍然无法正常工作,我一直在收到范围错误。

任何帮助,将不胜感激。

编辑:一位用户指出,如果我已经到了*主提示符,那么我的程序已经被加载和编译,我不需要运行ghc命令。如果是这样的话,我该如何运行它? Haskell.org指出:“然后你可以运行可执行文件(Unix系统上的./hello,Windows上的hello.exe)”,但是exe文件还没有被创建。

+1

我想GHCi已成功加载源文件并发出错误,因为源文件中存在错误。如果你发布了hello.hs,这将有所帮助。 – snak

+0

hello.hs的内容是main = putStrLn“Hello,world!” –

+1

@JoffreyBaratheon我在你的问题中添加了你最后评论的信息。今后,请点击您问题下方的“编辑”来编辑您的问题并自行添加此类信息。如果你的问题是独立的,你将有更好的机会得到一个好的答案。 – Jubobs

回答

4

我觉得首先导航到目录然后调用ghci更容易。一旦进入Prelude,您可以使用:l和文件名。

或者,您可以加载ghci,然后使用:l并使用文件的完全限定路径。

编辑: 在阅读您的编辑之后,您很清楚您的代码编译正常。一旦它说它已经编译完成,没有任何理由再尝试使用ghc(我认为你无法在ghci之内做到这一点)。

现在编译完成后,可以使用其中定义的任何代码和数据类型。因此,要使用主函数,只需在提示符处输入main即可。

+0

好的,所以我做了你所说的关于在cmd中导航到源文件,然后加载ghci。我这样做: Prelude>:l hello.hs 然后* Main> ghc -o hello hello.hs 而且我仍然不在范围内。 –

+0

当它将提示切换到'Main'时,这意味着你的文件已经被加载和编译。所以不应该尝试执行'ghc'。只需使用文件中定义的函数和数据类型即可。 –

+0

如果你说它已经编译完成,我将如何去运行它? Haskell.org说:“然后你可以运行可执行文件(Unix系统上的./hello,Windows上的hello.exe)。”如果我输入hello.exe,它不起作用。我现在真的很蠢,现在哈哈。 –

相关问题