2016-03-18 1 views
3

J'ai installé hoogle, en utilisant stack install hoogle. Maintenant, je peux rechercher des fonctions à l'aide d'une commande comme ceci stack ghci:Hoogle et yesod - comment trouver facilement des fonctions dans des paquets non-par défaut

:!hoogle --count=15 "[a] -> a" 

Je suis dans le répertoire racine de mon projet Yessod - la principale raison pour laquelle je l'ai installé était d'obtenir de l'aide avec des fonctions Yesod - mais lorsque je tente pour trouver une fonction de Yessod comme addHeader, il ne reconnaît pas un type défini sur Yesod:

:t addHeader 
addHeader :: MonadHandler m => Text -> Text -> m() 
:!hoogle --count=15 "MonadHandler m => Text -> Text -> m()" 
Warning: Unknown class MonadHandler 
. 
. 
. 

Comment puis-je Hoogle de configuration pour travailler à merveille avec Yessod et aussi ce projet très je travaille, de sorte que Hoogle apporterait mes propres fonctions et celles de Yesod?

Répondre

3

Vous devez d'abord obtenir Hoogle pour vous créer une base de données yessod-core:

λ> :!hoogle data yesod-core 
0 warnings, saved to .warnings 
Data generation complete 

Alors ça fonctionne!

λ> :!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 

Yuck, l'étiquette +yesod-core n'est pas géniale. Heureusement, nous pouvons 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 

(Votre chemin de bases de données varie selon que vous stack install ed ou cabal install ed.)

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

Bien mieux que Google.

+0

Pourriez-vous expliquer votre commande 'mv'? 'mv default.hoo {, - prev}' – FtheBuilder

+0

c'est une extension de shell! un {foo, bar} = afoo aba – hao