yunomuのブログ

酒とゲームと上から目線

Hoogleをローカルで使う

Haskellのマニュアル検索のHoogleってシステムがある。
http://www.haskell.org/hoogle/
便利なんだけど、manに慣れた我々としてはコマンドで使いたいじゃない。Erlangもmanっぽいの用意してくれてるし。
ということで、パッケージがありそうなので入れてみることにしました。

% cabal install hoogle

何故か、コマンドは入らないけどライブラリだけできてるっぽかった? なんかもう先に進んじゃったからよくわかんないけど、エラーメッセージを見ながら、確かnetworkパッケージをupgradeした。と思う。
パッケージを入れ直してcabal install hoogleしたらとりあえずhoogleコマンドが使えるようになった。

さっそく使ってみる。なにはなくともhelpである。

% hoogle --help
Hoogle v4.2.9, (C) Neil Mitchell 2004-2012
http://haskell.org/hoogle

hoogle [COMMAND] ... [OPTIONS]

Commands:
  [search]  Perform a search
  data      Generate Hoogle databases
  server    Start a Hoogle server
  combine   Combine multiple databases into one
  convert   Convert an input file to a database
  test      Run tests
  dump      Dump sections of a database to stdout
  rank      Generate ranking information
  log       Analyse log files

Common flags:
  -? --help     Display help message
  -V --version  Print version information
  -v --verbose  Loud verbosity
  -q --quiet    Quiet verbosity

csvパッケージについて調べる。

% hoogle csv
Could not find some databases: default
Searching in:
  .
  /Users/nomurayuusuke/Library/Haskell/ghc-7.0.4/lib/hoogle-4.2.9/share/databases

There are no available databases, generate them with: hoogle data

最初にデータベースを作らないといけないらしい。これバージョン変わったら作りなおさなきゃいけないのかなぁ。やだなぁ。昨日の時点では4.2.8だった気がするし。まあいいけど。

% hoogle data

で、検索してみる。

% hoogle csv
package csv
package csv-enumerator
package bytestring-csv
package cursedcsv

できた。けど、あれ、これの中身を見たいんだけどどうするの?

serverってコマンドがあって、なんかそれでサーバを立ててブラウザで見る感じ?

% hoogle server --port 31011
Starting Hoogle Server on port 31011

これで、
http://127.0.0.1:31011/
にアクセスするとHoogleのトップページと同じようなものが見られた。検索もできる。どうもこれで正解っぽい。

が、私はターミナルから手軽に参照したいのである。
ということで、.bashrcとか.zshrcにこんなのを書いた。

hman() {
	w3m http://127.0.0.1:31011/¥?hoogle=$1
}

これで、

% hman csv

とかやると、w3mでページが開きます。hoogleは起動スクリプトとかを書いてしまって自動起動するようにしておけばいいんじゃないでしょうか。
まあ、作ってみてナンだけど、つ か い づ ら い。
w3mとscreen縦分割の相性が悪いですね。tmuxだと解決したりとか、しないのかなぁ。縦分割標準だし。というかChromeで表示するようにした方がまだいい気がする。
まあ、なんでも、いいですけれど。

で、リンク先はWebだったりするのであんまし意味は無かった。なんのためにあるの。