haskell:在沙箱中共享模块?

时间:2015-02-05 22:48:58

标签: haskell cabal

我安装了Diagrams,一切都很好。

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

但如果我尝试使用它:import 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 \图表...

据我所知,我可以使用“cabal repl”代替GHCi,它会在路径中添加额外的软件包库引用,但我想使用其他Haskell IDE(Heat,Leksah)中安装的这些库。

我不确定这个沙箱是否是以前无法正常工作的cabal-install的补充,或者如果新的cabal版本(1.22)自动使用它们,或者......

我发现使用“cabal 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的所有其他工具?这是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

通常,调用cabal / GHC的IDE和其他工具需要知道沙箱,并且根据是否存在沙箱而行为有点不同。我无法与Leksah交谈,但对于emacs,了解CLI方式可以更轻松地设置IDE。

与沙箱相关的ghci等效值为cabal repl

与沙箱相关的ghc-pkg等效值为cabal sandbox hc-pkg

您想要构建的图表可能是值得的。我知道这对于仅依赖于diagrams-lib的单个Haskell文件来说似乎有些过分。我发现创建.cabal文件(或将可执行部分添加到公共my-diagrams.cabal)所花费的时间比找出如何制作所有工具(emacs haskell-mode,ghc-mod, hslint,GHC)在构建非cabalized文件的同时从沙箱中获取包。