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.