2015-09-07 66 views
0

我使用stack new Proj-Name simple命令創建了一個新項目,並且在/src目錄內創建的文件中導入了GHC基本庫import System.Process以外的模塊。運行stack build成功,並且該文件按我的預期工作。但是,當我在同一目錄內運行stack ghci時,它沒有已將System.Process列爲可導入模塊。棧GHCI沒有通過堆棧導入的模塊

如何製作它以便我所有導入的模塊都可以在stack ghci以內導入?

+1

這種行爲聽起來相當令人驚訝。原則上,你不應該在.cabal文件的'build-depends'中不能* stack *而不用* process *。我的猜測是這裏真正的問題是你在'/ src'中創建的文件沒有被添加到.cabal文件的相關部分(即'exposed-modules'或'other-modules')。如果是這樣的話,你的文件被'stack build'和其他命令忽略。 – duplode

+0

我想你已經指出了這個問題。我會相應地更新我給出的答案,但不會立即;隨意編輯或張貼自己的。 –

回答

1

儘管NicholasMontaño的答案中的信息是正確的,但我相信它沒有達到ro問題的一部分。問題的可能原因是新創建的源文件沒有在cabal文件中聲明,導致堆棧忽略它。項目中的每個源文件必須在cabal文件的一部分中聲明,例如exposed-modules(對於要公開給您的代碼的用戶的庫部分)或other-modules(對於您不想公開的內部模塊)。

1

當您運行stack new ...時,即使使用simple模板,您也會注意到會創建幾個允許堆棧工作的文件。其中一個是Proj_Name.cabal文件,如果打開它,您會注意到該文件的executable Proj_Name部分下有一個main-is: Main.hs行。

默認main-is文件將是Main.hs,但它可能是任何東西。您的導入應該在您希望作爲主文件的任何文件中進行。因此,在這種情況下,您可以簡單地將該文件的名稱(其中包含導入System.Process)替換爲該行中的Main.hs

在此之後,運行stack build,添加任何依賴它會告訴你下Proj_Name.cabalbuild-depends: base >= 4.7 && < 5線,在這種情況下看起來像:

build-depends:  base >= 4.7 && < 5 
        , process 

運行stack build再次(如果有任何進一步的問題,你可能想諮詢stack guide,現在stack ghci應該有你導入到該文件中的所有模塊可用。