3

我安装了hoogle,使用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 的功能?

4

1 回答 1

3

您需要先让 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 ()

比谷歌好太多了。

于 2016-03-18T18:17:18.703 回答