2017-10-19 142 views
0

我試圖加載我的.hs文件,但是當我import Data.Numbers.CReal時,它給了我錯誤Failed to load interface for 'Data.Numbers.CReal'。我拼命地跑了和cabal install numbers如果我cabal list --installed顯示的數字PKG,但如果我ghc-pkg list它不會(也如果我ghc-pkg check它給黑線鱈警告的手)。它與我的非加載文件有關嗎?我該如何解決這個問題?使用ghc-pkg列表和cabal列表 - 安裝給出不同的列表

Ps。我知道如何導入包,但我不確定我是否正確導入了這個包。

如果我沒有正確解釋自己,謝謝並對不起。

回答

1

兩種假設映入腦海:

  1. cabal是選擇一個不同版本的ghc其主治工具包比你的殼。您可以通過運行這兩個命令來檢查這種差異:

    cabal exec -- ghc --version 
    ghc --version 
    

    他們說同樣的事情嗎?如果是的話,拒絕這個假設。否則,你應該決定是否喜歡外殼的選擇或陰謀的選擇更好(我建議更喜歡你的外殼的選擇)。

    如果您更喜歡cabal的選擇,您可以通過在命令中附加-<version>來使用特定版本的GHC(和其他GHC工具)例如請嘗試ghc-pkg-7.10.3 list以查看版本7.10.3或ghci-7.10.3的軟件包數據庫中運行特定版本的REPL的內容。您可以通過添加符號鏈接或類似於您的PATH來使這些更改永久生效。

    如果你喜歡你的shell的選擇更好的,你可以要求cabal使用該版本cabal configure -w ghc;或者如果您擔心cabal和您的外殼將以不同方式解析ghc,則可以要求提供cabal configure -w ghc-7.10.3或類似的特定版本。

  2. 你的shell同意cabal關於使用什麼版本的GHC,但你在一個cabal沙盒中。 cabal list --installed告訴你沙盒中安裝了什麼,但ghc-pkg list告訴你用戶包數據庫中安裝了什麼。您可以檢查這兩個命令之間的差異:

    cabal exec -- ghc-pkg list numbers 
    ghc-pkg list numbers 
    

    (如果你有一個新望陰謀 - 不知道該出現在哪個版本 - 你也可以嘗試cabal hc-pkg list代替cabal exec -- ghc-pkg list這很可能是。更向前兼容的方式,所以一個良好的習慣來培養。)

    如果這些打印同樣的事情,拒絕這種假設。否則,您應該決定是否要繼續使用沙箱(我建議繼續使用沙箱)。

    如果要停止使用沙箱,你可以通過--ignore-sandboxcabal。爲了使其成爲永久的,請查看cabal.sandbox.config文件,該文件將包含一個指向實際沙箱的指針(通常爲.cabal.sandbox)。刪除配置和沙箱。您也可以通過將ignore-sandbox: True添加到~/.cabal/config來全局忽略沙箱,但我強烈建議您不要這樣做。

    如果您想保留沙箱,您需要使用cabal exec來滿足您的所有GHC工具包需求,以確保選擇正確的包數據庫。例如,嘗試使用cabal exec ghci來運行REPL,以訪問沙箱包數據庫。

這些假設並不相互排斥:可能發生。在這種情況下,我強烈建議選擇最終的解決方案(「對所有GHC工具包執行使用cabal exec」),因爲它可以透明地處理這兩個問題:標準GHC工具組命令將被重寫爲指代明確版本化的命令(例如,cabal exec ghc實際上將執行ghc-7.10.3 ),環境將被設置爲指向正確的包數據庫。

0

這個問題的答案

您可以通過運行這兩個命令檢查這種差異:

陰謀EXEC - GHC --version GHC --version

做他們說一樣的東西?

是的。我不記得第二個選項,但我已經設法自己解決它。我特別做的是:

  1. 運行命令「rm -rf .cabal」(不含指令)來刪除cabal配置。
  2. 運行「室射頻.cabal沙箱」
  3. 運行「室射頻.ghc」
  4. 陰謀新建的陰謀(不知道這是否有助於或不)
  5. 在管理模式(命令)我編輯了cabal配置文件並將Ignore Sandbox更改爲True - >這會在未來給我帶來什麼問題嗎?我應該把它改回false嗎?請回答
  6. 不得不刪除一個cabal.sandbox.config這是給一些麻煩
  7. 陰謀小集團安裝安裝
  8. 陰謀更新

現在GHC-PKG list命令和小集團列表 - 安裝顯示我安裝的軟件包,並且他們工作沒有問題。

Ps。我從這個過程中提供了詳細的信息,以防將來有人需要它。仍然不確定是什麼導致了cabal和ghc沒有顯示相同的pkgs。

+0

注意:不要意外刪除'.cabal/config'。 – sapanoia

+0

我認爲這個答案是「核選項」。我強烈建議未來的讀者首先嚐試更溫和的解決方案;例如如果'cabal'選擇了不同於你想要的GHC版本,你可以使用'cabal configure'來選擇另一個版本(如'cabal configure -w ghc-7.10.3')。我將編輯我的答案,在此解決方案中包含一些評論。手動刪除cabal沙箱是可以的(目前'cabal'沒有辦法以非手動的方式刪除它們),但你應該明白爲什麼沙箱首先存在,並確保你實際上不需要它... –

+0

哦,我誤解了;考慮到這裏的細節,我強烈懷疑我的另一個提議的假設(「你在一個cabal沙箱中,'cabal list -installed'告訴你在沙箱中安裝了什麼,但'ghc-pkg list'告訴你什麼是安裝的在你的用戶包數據庫中「)是正確的。 'cabal configure'對此無能爲力,但在我的回答中,我概括了兩個溫和的解決方案。 –