Hoogle и yesod - как легко найти функции в нестандартных пакетах

Я установил Google, используя stack install hoogle, Теперь я могу искать функции с помощью такой команды из stack ghci:

:!hoogle --count=15 "[a] -> a"

Я нахожусь в корневом каталоге моего проекта Yesod - основная причина, по которой я его установил, состояла в том, чтобы получить помощь по функциям Yesod, - но когда я пытаюсь найти функцию из Yesod, такую ​​как addHeader, он не распознает тип, определенный в Yesod:

:t addHeader
addHeader :: MonadHandler m => Text -> Text -> m ()
:!hoogle --count=15 "MonadHandler m => Text -> Text -> m ()"
Warning: Unknown class MonadHandler
.
.
.

Как я могу настроить hoogle для прекрасной работы с Yesod, а также с этим самым проектом, над которым я работаю, чтобы hoogle приносил свои собственные функции и функции Yesod?

1 ответ

Решение

Сначала вам потребуется Hoogle, чтобы создать базу данных yesod-core:

λ> :!hoogle data yesod-core
0 warnings, saved to .warnings
Data generation complete

Тогда это просто работает!

λ> :!hoogle "+yesod-core MonadHandler m => Text -> Text -> m ()"
Yesod.Core.Handler addHeader :: MonadHandler m => Text -> Text -> m ()
Yesod.Core.Handler deleteCookie :: MonadHandler m => Text -> Text -> m ()
Yesod.Core.Handler setHeader :: MonadHandler m => Text -> Text -> m ()
Yesod.Core.Handler setSession :: MonadHandler m => Text -> Text -> m ()
Yesod.Core.Widget toWidgetMedia :: (ToWidgetMedia site a, MonadWidget m, HandlerSite m ~ site) => Text -> a -> m ()
Yesod.Core.Json (.=) :: KeyValue kv => forall v. ToJSON v => Text -> v -> kv

Гадость +yesod-core тег не большой К счастью, мы можем объединить наши базы данных Hoogle в одну большую:

$ cd ~/.stack/snapshots/x86_64-osx/lts-5.8/7.10.3/share/x86_64-osx-ghc-7.10.3/hoogle-4.2.43/databases 
$ mv default.hoo{,-prev}
$ hoogle combine *.hoo

(Путь к вашим базам данных будет зависеть от того, stack installред или cabal installред.)

λ> :!hoogle "addHeader"
Yesod.Core.Handler addHeader :: MonadHandler m => Text -> Text -> m ()
Network.CGI.Monad cgiAddHeader :: MonadCGI m => HeaderName -> String -> m ()

Гораздо лучше, чем Google.

Другие вопросы по тегам