2014-12-25 40 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,它不起作用。我現在真的很蠢,現在哈哈。 –

相關問題