4
runghc -package-db=.cabal-sandbox/.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d hellowai.hs

私にぴったりです。

同様に、

ghci -package-db=.cabal-sandbox/.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d 

また、cabal-sandbox でインストールWaiしたパッケージをghci問題なくインポートできます。

しかしghc-mod、haskell のソース コードを検証するように依頼すると、

ghc-mod check --boundary="" -g -package-db=.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d hellowai.hs
hellowai.hs:4:8:Could not find module ‘Network.Wai.Handler.Warp’Use -v to see a list of the files searched for.
hellowai.hs:3:8:Could not find module ‘Network.HTTP.Types’Perhaps you meant  Network.HTTP.Base (from HTTP-4000.2.19)  Network.HTTP.Base (needs flag -package HTTP-4000.2.10)  Network.HTTP.Headers (needs flag -package HTTP-4000.2.10)Use -v to see a list of the files searched for.
hellowai.hs:2:8:Could not find module ‘Network.Wai’Perhaps you meant  Network.BSD (needs flag -package network-2.4.2.3)  Network.URI (needs flag -package network-2.4.2.3)  Network.TCP (needs flag -package HTTP-4000.2.10)Use -v to see a list of the files searched for.

cabal サンドボックスにインストールされたモジュールが見つかりません。どうしてこんなことに?

4

1 に答える 1

4

ファイルはありcabal.sandbox.configますか?.cabalまた、プロジェクトにファイルを使用していますか?

これらの両方があれば、使用できるはずであり、ghc-mod check ...機能します。

.cabal ファイルを使用するもう 1 つの利点は、使用して ghciを呼び出し、正しいコマンド ライン オプションでcabal repl呼び出すことができることです。cabal runrunhaskell

アップデート

これは、ghc-mod がカバール サンドボックスをいつ見つけられるかを確認するために試すことができるレシピです。おそらく、これはセットアップの違いを判断するのに役立ちます。

クリーンなディレクトリで開始します。

$ mkdir foo
$ cd foo
$ cabal sandbox init
$ cabal get split
$ cd split-0.2.2
$ cabal sandbox init --sandbox=../.cabal-sandbox

split.cabal の 55 行目あたりを編集しheredocて、依存関係として追加します。

モジュールを使用するように src/Data/List/Split.hs を編集しますText.Heredoc

{-# LANGUAGE QuasiQuotes #-}
...
import Text.Heredoc
...
foo :: String
foo = [here|this is a test|]

heredocがインストールされていることを確認します。

$ cabal install --only-dependencies

最後に、これはうまくいくはずです:

$ ghc-mod check ./src/Data/List/Split.hs

また、サブディレクトリに cd した場合でも機能します。

$ cd src
$ ghc-mod check ./Data/List/Split.hs

ただし、引っ越した場合、ghc-mod は機能しませんsplit.cabal

(back at the top level directory)
$ mv split.cabal split.cabal-old
$ ghc-mod check ./src/Data/List/Split.hs

この場合、作業ディレクトリの親ディレクトリにサンドボックスを作成しましたが、最初のサンドボックスが次のように作成された場合も機能するはずです。

$ mkdir foo
$ cd foo
$ mkdir sandbox-dir
$ cd sandbox-dir
$ cabal sandbox init
$ cd ..
$ cabal get split
$ cd split-0.2.2
$ cabal sandbox init --sandbox=../sandbox-dir/.cabal-sandbox
于 2015-01-06T06:19:11.073 に答える