nixpkgs中的haskell包在哪里去?

Tor*_*nny 4 haskell ghc cabal nix

我曾经习惯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有什么关系吗?

谢谢.

Sib*_*ibi 7

我记得在Peter Simons的邮件列表中看到了(尽管我现在找不到确切的链接),因为它们非常大而且nix-env已经很大,因此通过nix-env禁用了来自顶层命名空间的Haskell包的搜索很慢.相反,所有haskell包都位于一个名为的单独命名空间中haskellPackages.有关更多信息,请参阅此处.要安装类似的Haskell软件包text,可以使用以下命令:

nix-env -i -A nixpkgs.haskellPackages.text
Run Code Online (Sandbox Code Playgroud)

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

nix-env -f "<nixpkgs>" -qaP -A haskellPackages | grep text
Run Code Online (Sandbox Code Playgroud)


Pet*_*ons 6

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

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

$ nix-env -i alex
error: selector ‘alex’ matches no derivations
$ nix-env -qa ghc
ghc-7.10.2
Run Code Online (Sandbox Code Playgroud)

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  ...]
Run Code Online (Sandbox Code Playgroud)

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

$ nix-env -f "<nixpkgs>" -iA haskellPackages.Allure ...
Run Code Online (Sandbox Code Playgroud)

任何Haskell包的属性路径对应于Hackage上特定包的名称:包cabal-install具有属性 haskellPackages.cabal-install,依此类推.