如何通过命令行用Hoogle搜索所有包?同步本地与Web端数据库
让本地Hoogle拥有和Web端一致的搜索结果
嘿,我懂你遇到的问题——本地Hoogle默认只索引了GHC自带的核心库,而Web端的Hoogle可是把Hackage上几乎所有包都收录进去了,所以搜索结果数量差很多很正常。要让本地达到和Web端一样的效果,只需要几步就能搞定:
步骤1:更新Hackage包索引
首先得确保你的本地Hackage索引是最新的,不然下载包定义的时候可能会拿到旧数据:
- 如果你用cabal管理包:
cabal update - 如果你用stack:
stack update
步骤2:下载全量Hackage包的Hoogle定义
Hoogle有个专门的命令可以下载Hackage上所有包的.hoogle文档文件,这是生成全量索引的关键:
hoogle download
这一步可能要等一会儿,毕竟要拉取大量包的定义文件,耐心等它跑完就行。
步骤3:重新生成完整的Hoogle数据库
现在运行生成命令,Hoogle就会基于刚下载的全量包定义来构建索引了:
hoogle generate --hackage
其实也可以直接跑hoogle generate,因为下载完包定义后,Hoogle默认会使用这些文件生成完整索引,加--hackage只是明确指定用Hackage的全量数据而已。
步骤4:验证效果
现在再搜索maybeToEither,你会发现结果和Web端完全一致了:
hoogle maybeToEither
额外小提示
- 之后如果Hackage上有新包发布,你只需要重复
hoogle download和hoogle generate这两步,就能更新本地索引啦。 - 要是你只想给某个特定包生成索引,比如只加
network-haskoin,可以用hoogle generate --package network-haskoin,这样更省时间。
内容的提问来源于stack exchange,提问作者Chris Stryczynski
相关产品推荐
相关产品推荐

