Hoogle 和 yesod - 如何在非默认包中轻松找到函数
Hoogle and yesod - how to easily find functions in non-default packages
我使用 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 的功能?
您需要先获取 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 ()
比 Google 好多了。
我使用 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 的功能?
您需要先获取 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 ()
比 Google 好多了。