我使用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的功能?
答案 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 ()
比谷歌更好。