我使用stack new Proj-Name simple
命令創建了一個新項目,並且在/src
目錄內創建的文件中導入了GHC基本庫import System.Process
以外的模塊。運行stack build
成功,並且該文件按我的預期工作。但是,當我在同一目錄內運行stack ghci
時,它沒有已將System.Process
列爲可導入模塊。棧GHCI沒有通過堆棧導入的模塊
如何製作它以便我所有導入的模塊都可以在stack ghci
以內導入?
我使用stack new Proj-Name simple
命令創建了一個新項目,並且在/src
目錄內創建的文件中導入了GHC基本庫import System.Process
以外的模塊。運行stack build
成功,並且該文件按我的預期工作。但是,當我在同一目錄內運行stack ghci
時,它沒有已將System.Process
列爲可導入模塊。棧GHCI沒有通過堆棧導入的模塊
如何製作它以便我所有導入的模塊都可以在stack ghci
以內導入?
儘管NicholasMontaño的答案中的信息是正確的,但我相信它沒有達到ro問題的一部分。問題的可能原因是新創建的源文件沒有在cabal文件中聲明,導致堆棧忽略它。項目中的每個源文件必須在cabal文件的一部分中聲明,例如exposed-modules
(對於要公開給您的代碼的用戶的庫部分)或other-modules
(對於您不想公開的內部模塊)。
當您運行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.cabal
的build-depends: base >= 4.7 && < 5
線,在這種情況下看起來像:
build-depends: base >= 4.7 && < 5
, process
運行stack build
再次(如果有任何進一步的問題,你可能想諮詢stack guide,現在stack ghci
應該有你導入到該文件中的所有模塊可用。
這種行爲聽起來相當令人驚訝。原則上,你不應該在.cabal文件的'build-depends'中不能* stack *而不用* process *。我的猜測是這裏真正的問題是你在'/ src'中創建的文件沒有被添加到.cabal文件的相關部分(即'exposed-modules'或'other-modules')。如果是這樣的話,你的文件被'stack build'和其他命令忽略。 – duplode
我想你已經指出了這個問題。我會相應地更新我給出的答案,但不會立即;隨意編輯或張貼自己的。 –