在沙箱中安装parsec,但在尝试加载ghci中的文件时找不到库

时间:2014-04-16 21:37:25

标签: haskell ghc cabal

tl; dr:安装了带有cabal沙箱的库,ghci仍抱怨库缺失

我有一个目录,我正在开发一些Haskell的东西。这曾经在ghc 7.6的另一台计算机上正常工作,但现在我正在使用ghc 7.8.2在另一台计算机上工作(我不知道版本是否重要)我得到这样的错误:

  

前奏> :l Interpreter.hs

     

Parser.hs:9:8:       找不到模块'Text.ParserCombinators.Parsec'       也许你的意思         Text.ParserCombinators.ReadPrec(来自基地)         Text.ParserCombinators.ReadP(来自基地)       使用-v查看搜索到的文件列表。

尝试从ghci加载文件时。这些文件位于BASE / src / Lib中,其中BASE是具有LIB.cabal的目录以及所有这些文件。所以我认为有一些东西与cabal。为了避免可怕的故事,我在项目中制作了一个沙箱(cabal sandbox init),我之前没有使用过。然后我手动删除了其他与cabal相关的内容并执行了cabal init。我做了cabal install --dependencies-only,但实际上并没有安装任何东西(我只是因为 - 依赖性而猜测?我太偏执了全局安装以使用常规的cabal安装)。所以我尝试手动将内容添加到我的.cabal文件中(这是你应该怎么做的?),即:

  

build-depends:

     

base> = 4.7&& < 4.8,

containers >=0.5 && <0.6,

-- 

parsec == 3.1.* -- THIS is the line I added

现在我做了cabal install --dependencies-only。瞧,实际安装的东西,特别是:

  

[21 of 25]编译Text.Parsec(Text / Parsec.hs,dist / dist-sandbox-a2fe5095 / build   /Text/Parsec.o)

     

...

     

就地注册parsec-3.1.5 ......   在/ home / PATHTODIR / Stack中安装库   郎/ .cabal的沙箱/ lib目录/ x86_64的Linux的-GHC-7.8.2 /秒差距-3.1.5   注册parsec-3.1.5 ......   已安装parsec-3.1.5

所以我尝试在ghci中加载相同的文件,产生相同的错误。请注意问题是Text.ParserCombinators.Parsec,根据我运行cabal install --dependencies-only的时间,它似乎安装得很好。以下是ghc -v Interpreter.hs的输出结果:

  

格拉斯哥Haskell编译器,版本7.8.2,第2阶段由GHC版本7.4.1启动

     

使用二进制包数据库:/opt/ghc/7.8.2/lib/ghc-7.8.2/package.conf.d/package.cache

     

有线包ghc-prim映射到ghc-prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8

     

有线输入包integer-gmp映射到integer-gmp-0.5.1.0-dc47f6b546fc171f67a7f7d311684a99

     

有线封装基址映射到base-4.7.0.0-018311399e3b6350d5be3a16b144df9b

     

有线输入包rts映射到builtin_rts

     

有线包模板-haskell映射到template-haskell-2.9.0.0 -

     

dcc8c210fb02937e104bc1784d7b0f06

     

未找到有线程序包dph-seq。

     

未找到有线输入包dph-par。

     

Hsc静态标志:

     

有线包ghc-prim映射到ghc-prim-0.3.1.0-948744e1f99cc8bcc7c7d3ba60c7c2d8

     

有线输入包integer-gmp映射到integer-gmp-0.5.1.0 -

     

dc47f6b546fc171f67a7f7d311684a99

     

有线封装基址映射到base-4.7.0.0-018311399e3b6350d5be3a16b144df9b

     

有线输入包rts映射到builtin_rts

     

有线包模板-haskell映射到template-haskell-2.9.0.0 -

     

dcc8c210fb02937e104bc1784d7b0f06

     

未找到有线程序包dph-seq。

     

未找到有线输入包dph-par。

     

* 追逐依赖关系:

     

从以下各处追逐模块:* Interpreter.hs

     

Parser.hs:9:8:       找不到模块'Text.ParserCombinators.Parsec'       也许你的意思         Text.ParserCombinators.ReadPrec(来自基地)         Text.ParserCombinators.ReadP(来自基地)       搜索地点:         文/ ParserCombinators / Parsec.hs         文本/ ParserCombinators / Parsec.lhs

     

Parser.hs:10:18:       找不到模块'Text.Parsec.Token'       搜索地点:         文/秒差距/ Token.hs         文本/秒差距/ Token.lhs

     

Interpreter.hs:11:8:       找不到模块'Control.Monad.Error'       也许你的意思         Control.Monad.Fix(来自基地)         Control.Monad.ST(来自基地)         Control.Monad.Zip(来自基地)       搜索地点:         控制/单子/ Error.hs         控制/单子/ Error.lhs

     

Interpreter.hs:15:8:       找不到模块'Text.ParserCombinators.Parsec.Error'       搜索地点:         文/ ParserCombinators /秒差距/ Error.hs         文/ ParserCombinators /秒差距/ Error.lhs    *删除临时文件:   删除:   * 删除临时目录:   正在删除:

1 个答案:

答案 0 :(得分:11)

ghc / ghci不会自动识别沙箱。默认情况下,它们仅查看全局和用户包数据库。

使用cabal repl启动ghci,或关注文章cabal sandbox tips中的收件人。两者都可能需要最近(1.18之后)的阴谋集。