Как я могу искать все пакеты с помощью Google через командную строку?
Я установил Google локально и запустил 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
Есть ли способ, которым я могу генерировать ту же "базу данных" локально? Или есть ли CLI для поиска https://hoogle.haskell.org/?
Согласно https://wiki.haskell.org/Hoogle я должен быть в состоянии запустить hoogle data
или же hoogle data all
- но это, кажется, просто сделать поиск (может быть, устарел?).
2 ответа
Я старался:
$ 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.Extra
а также Extra
записи в одну строку, поскольку они относятся к одному и тому же определению. Кроме этого, они совпадают.
Обратите внимание, что hoogle generate
генерирует базу данных на основе того, что вы уже скачали, поэтому, если вы запустите hoogle generate
каждый месяц результат не изменится. Добавление --download
заставляет гугл скачать заново.
Этот проект может представлять интерес: 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
результаты в: