2015-01-06 2 views
3
runghc -package-db=.cabal-sandbox/.cabal-sandbox/x86_64-osx-ghc-7.8.3-packages.conf.d hellowai.hs 

Работы идеально подходят для меня.ghc-mod не использует мою песочницу. Зачем?

Точно так же, с

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

Я также способен импортировать мои заговорщик-песочницу установлены 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. 

Он не может найти свой междусобойчик песочнице установленный модуль. Почему это так?

ответ

4

У вас есть файл cabal.sandbox.config? И используете ли вы файл .cabal для своего проекта?

Если у вас есть оба они, вы сможете использовать ghc-mod check ..., и он просто будет работать.

Еще одно преимущество использования .cabal файла является то, что вы можете использовать cabal repl для вызова GHCI и cabal run вызывать runhaskell с нужными параметрами командной строки.

Update

Вот рецепт, вы можете попробовать, чтобы увидеть, когда GHC-моды могут найти свой междусобойчик песочницу. Возможно, это поможет вам определить, что отличается от вашей настройки.

Начало в чистом каталоге:

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

Редактировать вокруг линии 55 split.cabal добавить heredoc как зависимость.

Редактировать SRC/Data/Список/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-мод не будет работать, если вы удаляетесь 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 
+0

Абсолютно. У меня есть файл 'cabal.sandbox.config', присутствующий в каталоге, где я запускаю команды' ghc-mod check'. Но 'ghc-mod' до сих пор не знает, чтобы проверить наличие доступных пакетов в моей песочнице. –

+0

Мои эксперименты показывают, что вам также нужен файл .cabal. – ErikR

+0

Как я могу сгенерировать файл '.cabal'? –

Смежные вопросы