如果只使用堆栈,如何取消隐藏包?

时间:2015-07-23 16:46:37

标签: haskell haskell-stack

我想试试ghci中的Writer monad。正如here所述,我尝试仅使用堆栈来管理GHC和包,并避免全局安装。

安装堆栈后,从全新的Ubuntu 15.04安装:

stack setup
mkdir lyah && cd lyah
stack new
stack install mtl
stack ghci
ghci> import Control.Monad.Writer
Could not find module ‘Control.Monad.Writer’
It is a member of the hidden package ‘mtl-2.1.3.1’.

我知道pre-stack ghc-pkg用于显示/隐藏包,但我不知道如何继续“取消隐藏”mtl包。

4 个答案:

答案 0 :(得分:12)

修改已创建的.cabal文件stack new,并将mtl添加到build-depends部分。该部分文件应如下所示:

build-depends:       base >= 4.7 && < 5
                   , mtl

然后,在stack build之前执行stack ghci

顺便说一下,不要使用stack install来安装库 - 它只是复制二进制文件的快捷方式。例如。 stack install hlint将首先构建包,然后将生成的二进制文件复制到〜/ .local / bin / 。相反,始终将包添加到.cabal文件中,如上所示,并使用stack build以便安装它们。

答案 1 :(得分:0)

由于您正在使用GHCi,因此您只需更改传递给基础GHC的命令行即可。例如,我最近这样做:

Prelude> import qualified GI.Gtk as Gtk

<no location info>: error:
    Could not load module ‘GI.Gtk’
    It is a member of the hidden package ‘gi-gtk-3.0.31’.
    Perhaps you need to add ‘gi-gtk’ to the build-depends in your .cabal file.
    It is a member of the hidden package ‘gi-gtk-3.0.27’.
    Perhaps you need to add ‘gi-gtk’ to the build-depends in your .cabal file.
Prelude> :set -package gi-gtk-3.0.27
package flags have changed, resetting and loading new packages...
Prelude> import qualified GI.Gtk as Gtk
Prelude Gtk> 

答案 2 :(得分:0)

只是为了补充@Jazmit 的回答。请注意,您的 .cabal 文件将包含两个 build-depends 部分。一个低于 library: 另一个在 executable my-project-exec 下。在这种情况下,您需要将模块放在 executable 部分下。

示例:

my-project.cabal

library: 
  build-depends:
  ...

executable my-project-exe:
  build-depends:
    base >= 4.7 && < 5
    , mtl

有关库和可执行文件的更多信息,请查看文档: https://cabal.readthedocs.io/en/latest/developing-packages.html#editing-the-cabal-file

答案 3 :(得分:0)

如果您使用的是 #df is a DataFrame object df.to_csv('out.csv') ,请尝试将您的包定义添加到 stack 中的 dependencies 字段以将其公开到您的项目中。

package.yaml

那么,dependencies: - mtl

Example of package.yaml