如何通过命令行搜索带有 hoogle 的所有包?

How can I search all packages with hoogle via command line?

我已经在本地安装了 hoogle 并且 运行 hoogle generate

如果我 运行 hoogle maybeToEither 我得到:

Data.Either.Utils maybeToEither :: MonadError e m => e -> Maybe a -> m a
Either maybeToEither :: Monoid b => (a -> b) -> Maybe a -> b
Network.Haskoin.Util maybeToEither :: b -> Maybe a -> Either b a

但是,如果我使用网络搜索,我会得到更多条目:https://hoogle.haskell.org/?hoogle=maybeToEither

有没有办法在本地生成相同的 'database'?或者是否有用于搜索 https://hoogle.haskell.org?

的 CLI

根据 https://wiki.haskell.org/Hoogle,我应该能够 运行 hoogle datahoogle data all - 但这似乎只是进行搜索(所以可能过时了?)。

可能对这个项目感兴趣:https://github.com/andrevdm/bhoogle

我也写了bash函数(取决于jq、fzf、xclip):

hoogle_searchAndCopy() {
  wget -qO- https://hoogle.haskell.org/\?hoogle\=""\&scope\=set%3Astackage\&mode\=json \
    | jq -r ".[] | \"import \(.module.name)\n\(.package.name)\n--\"" \
    | fzf | xclip ;
  }

hoogle_searchAndCopy maybeToEither 结果:

我试过了:

$ cabal update
$ cabal install hoogle
Installed hoogle-5.0.17.2
$ hoogle generate --download
$ hoogle maybeToEither

并得到回复:

Data.Either.Utils maybeToEither :: MonadError e m => e -> Maybe a -> m a
Data.Either.Extra maybeToEither :: a -> Maybe b -> Either a b
Extra maybeToEither :: a -> Maybe b -> Either a b
Protolude.Either maybeToEither :: e -> Maybe a -> Either e a
Agda.Utils.Either maybeToEither :: Maybe a -> Either () a
Intro maybeToEither :: () => a -> Maybe b -> Either a b

目前网络显示 6 个条目,因为它已将 Data.Either.ExtraExtra 条目合并为一行,因为它们指的是相同的定义。除此之外,他们匹配。

请注意,hoogle generate 会根据您已经下载的内容生成一个数据库,因此如果您每个月 运行 hoogle generate 结果都不会改变。添加 --download 强制 Hoogle 重新下载。