2015-02-05 86 views
2

我做了一個圖的安裝,並且都很好。haskell:跨沙箱共享模塊?

>cabal install diagrams 
Resolving dependencies... 
All the requested packages are already installed: diagrams-1.2 
Use --reinstall if you want to reinstall anyway. 

但是,如果我嘗試使用它:進口Diagrams.Prelude

Could not find module `Diagrams.Prelude' 
    Use -v to see a list of the files searched for. 

和:

>ghc-pkg list diagrams 
WARNING: there are broken packages. 
Run 'ghc-pkg check' for more details. 
e:/Plang/Haskell Platform\lib\package.conf.d: 
    (no packages) 
C:\Users\guthrie\AppData\Roaming\ghc\i386-mingw32-7.8.3\package.conf.d: 
    (no packages) 

(破碎的包是有一個良好的新的東西所有舊版本版本已安裝。)

它似乎安裝在.cabal-sandbox中,但未由ghc-pkg(?)報告:

C:\Users\guthrie\.cabal-sandbox\i386-windows-ghc-7.8.3-packages.conf.d \圖表...

我明白,而不是GHCI我可以使用「陰謀REPL」,這將這個添加到路徑附加包庫引用,但我想使用其他這些安裝的庫Haskell IDE(Heat,Leksah)。

我不知道,如果這個沙箱是一個殘以前的小集團安裝本來不會工作,或者如果新的陰謀版本(1.22)自動使用它們,或...

我發現,使用「陰謀EXEC GHC」可能會解決這個問題,但我試了一下,雖然投入自己累得顯式路徑,我沒有找到這個正確的用法:

-- Good: 
ghc --make Program.hs -package-db=c:\users\name\.cabal-sandbox\i386-windows-ghc-7.8.3-packages.conf.d\ 
-- Fails: 
cabal ghc --make Program.hs 

而且目前的IDE沒有這個選項。我必須添加一個指向這個目錄的命令行選項(-package-db =)到所有其他使用GHC的工具嗎?這是正確的做法嗎?

+0

這是一個項目目錄中的沙箱(即與.cabal文件相同的文件夾)?如果是這樣,那麼一個集成了cabal *的IDE應該在構建項目時自動使用它(因爲cabal是這樣做的)。如果你使用的是沙箱只是爲了保持你的全局/用戶包db的清潔,那麼就把'ghc'別名爲'ghc -package-db = ...' - 這就是我所做的。這可能不起作用,例如,如果您的IDE以絕對路徑調用ghc - 所以確切知道您的特定IDE調用了什麼命令會很有幫助。 – user2407038 2015-02-06 00:50:13

+0

您可以使用'cabal repl'來啓動GHCi,使用沙箱中的軟件包。 – Cactus 2015-02-06 02:14:16

+0

不,不是本地沙箱,主目錄中的全局沙箱(c:/users/name/.cabal-sandbox ...)。Windows沒有別名的概念 - 我不得不擺弄Haskell平臺的安裝,這可能會破壞事情。我精簡所有的IDE默認使用GHC.exe的直接路徑解析。不知何故,沙箱的自動使用和以前GHC的使用看起來並不完美(但?)。 – guthrie 2015-02-06 03:25:50

回答

1

一般來說,調用cabal/GHC的IDE和其他工具需要知道沙箱,並根據沙盒是否存在不同而表現出不同的行爲。我無法與Leksah交談,但對於emacs,瞭解CLI方式使設置IDE變得更容易。

ghci的沙盒感知等價物是cabal repl

ghc-pkg的沙箱感知等價物是cabal sandbox hc-pkg

這可能是值得你想要建立的關係圖。我知道這似乎矯枉過正一個單一的Haskell文件,只取決於diagrams-lib。我發現創建一個.cabal文件(或將一個可執行部分添加到常見的my-diagrams.cabal)花費的時間比想出如何使所有工具(emacs haskell-mode,ghc-mod,hslint,GHC)一個沙盒,同時構建一個非cabalized文件。

+0

謝謝。但是,這將(意味着)也意味着沙箱的這種使用不會與現有工具向後兼容。是否有.ghc選項可以隱藏並全球化包含一組標準已安裝的沙箱包? – guthrie 2015-02-11 21:00:15

+0

我同意缺乏向後兼容性。我希望有更多關於如何使各種Haskell工具一起工作的文檔。不過,我不知道你的問題的答案。 – bergey 2015-02-12 14:34:45