3

我已经在本地安装了 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

有没有办法可以在本地生成相同的“数据库”?或者是否有可能用于搜索 https://hoogle.haskell.org的 CLI ?

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

4

2 回答 2

1

这个项目可能很有趣:https ://github.com/andrevdm/bhoogle

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

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

hoogle_searchAndCopy maybeToEither结果是:

在此处输入图像描述

于 2018-03-24T17:41:55.777 回答
1

我试过了:

$ 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 重新下载。

于 2018-03-25T10:03:17.163 回答