Hoogle和yesod - 如何在非默认包中轻松查找功能

时间:2016-03-18 17:04:19

标签: haskell terminal yesod ghci hoogle

我使用stack install hoogle安装了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 个答案:

答案 0 :(得分: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标签并不好。幸运的是,我们可以combine our Hoogle databases into one big one

$ 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 ed还是cabal install ed。)

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

比谷歌更好。