You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用nix search命令搜索Haskell包?解决搜索无结果问题

如何用nix search搜索Haskell包?

当然可以用nix search查找Haskell包!默认搜不到只是因为Nixpkgs里的haskellPackages属性集默认没开启递归搜索,下面我一步步给你讲清楚配置方法和验证步骤:

为什么默认搜不到?

Nixpkgs里的haskellPackages是一个包含所有Haskell包的大属性集,但默认情况下,Nix不会自动遍历这类嵌套属性集的子项。而recurseIntoAttrs这个函数的作用就是告诉Nix:“把这个属性集里的所有子包都暴露出来,允许搜索工具遍历到它们”——这就是你在IRC日志里看到的解决方案的核心。

两种配置方式

方式一:临时命令行使用(无需修改配置)

如果你只是想临时测试一下,可以直接在nix search命令里内嵌overlay:

# 直接搜索关键词,比如aeson
nix search --expr 'with import <nixpkgs> { overlays = [ (self: super: { haskellPackages = super.recurseIntoAttrs super.haskellPackages; }) ]; }' aeson

# 或者指定搜索haskellPackages下的包,更精准
nix search --expr 'with import <nixpkgs> { overlays = [ (self: super: { haskellPackages = super.recurseIntoAttrs super.haskellPackages; }) ]; }' haskellPackages.ghcid

执行后就能看到对应的包结果了,而且会利用Nix的缓存,比旧的nix-env命令快很多。

方式二:永久配置(一劳永逸)

如果你想每次用nix search都能直接搜到Haskell包,可以把overlay写到用户配置里:

  1. 创建overlay目录(如果不存在的话):
    mkdir -p ~/.config/nixpkgs/overlays
    
  2. 在该目录下新建一个配置文件,比如haskell-search.nix:
    self: super: {
      haskellPackages = super.recurseIntoAttrs super.haskellPackages;
    }
    
  3. 保存文件后,直接执行nix search ghcid或者nix search aeson,就能看到对应的Haskell包结果了!

验证配置是否生效

比如搜索ghcid,你应该会看到类似这样的输出:

haskellPackages.ghcid - Very fast GHCi based IDE

这就说明配置成功了,以后不管搜哪个Haskell包,直接用nix search加包名就行,速度比旧方法快很多,还能享受缓存带来的便利。

内容的提问来源于stack exchange,提问作者Hjulle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:39:51