4

我曾经nix-env -qaP <haskell-package-name>搜索过一个haskell包。但是自从我前段时间更新了我的 nix 频道后,所有的 haskell 包都消失了。

具体来说:qs@BF:~$ nix-channel --list nixpkgs https://nixos.org/channels/nixpkgs-unstable

qs@BF:~$ nix-env --version nix-env (Nix) 1.9

qs@BF:~$ uname -a Linux BF 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

我想知道是否需要添加一些可能包含 haskell 包的其他频道。Haskell NG有什么关系吗?

谢谢。

4

2 回答 2

7

我记得在 Peter Simons 的邮件列表(虽然我现在找不到确切的链接)中看到,已经通过 nix-env 禁用了顶级命名空间中的 Haskell 包的搜索,因为它们非常大并且 nix-env 已经存在很慢。相反,所有的 haskell 包都在一个名为haskellPackages. 有关详细信息,请参阅此处。要安装类似的 Haskell 包text,可以使用以下命令:

nix-env -i -A nixpkgs.haskellPackages.text

要查找包名称,请使用以下命令:

nix-env -f "<nixpkgs>" -qaP -A haskellPackages | grep text
于 2015-07-12T11:59:48.843 回答
6

引用http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure

Nixpkgs 为在Hackage上注册的所有 Haskell 包分发构建指令 ,但奇怪的是,正常的 Nix 包查找似乎没有发现任何一个,除了默认版本的 ghc、cabal-install 和 stack:

$ nix-env -i alex
error: selector ‘alex’ matches no derivations
$ nix-env -qa ghc
ghc-7.10.2

Haskell 包集没有在顶级命名空间中注册,因为它是巨大的. 如果这些命令可以看到所有 Haskell 包,那么基于名称的搜索/安装操作将比现在慢得多。我们通过将所有与 Haskell 相关的包保存在一个名为 的单独属性集中来避免这种情况,haskellPackages以下命令将列出该属性集:

$ nix-env -f "<nixpkgs>" -qaP -A haskellPackages
haskellPackages.a50         a50-0.5
haskellPackages.abacate     haskell-abacate-0.0.0.0
haskellPackages.abcBridge   haskell-abcBridge-0.12
haskellPackages.afv         afv-0.1.1
haskellPackages.alex        alex-3.1.4
haskellPackages.Allure      Allure-0.4.101.1
haskellPackages.alms        alms-0.6.7
[... some 8000 entries omitted  ...]

要将这些软件包中的任何一个安装到您的配置文件中,请通过它们的属性路径(第一列)引用它们:

$ nix-env -f "<nixpkgs>" -iA haskellPackages.Allure ...

任何 Haskell 包的属性路径对应于 Hackage 上该特定包的名称:该包cabal-install具有属性 haskellPackages.cabal-install,等等。

于 2015-11-19T11:49:05.697 回答