2014年2月23日日曜日

[Haskell][Emacs]Hoogleをローカルで使う

Hoogleをローカルで使ってみた。
ついでに、Hoogle検索できる、少しだけ便利なELispを書いた。

インストール

cabalでインストールできる。
$ cabal install hoogle
多くのライブラリに依存しており、インストールには少し時間がかかる。
データベースを作成する。
$ hoogle data
データベースのダウンロードに少し時間がかかる。

試してみる

$ hoogle Data.List
Data.List module Data.List
package List
package ListLike
package ListTree
package ListZipper
Data.Maybe listToMaybe :: [a] -> Maybe a
package list-extras
package list-grouping
〜以下略〜

検索できたが、テキストベースだとちょっと見難い。

サーバーにする

サーバーとしても起動できる。
以下の例は3000番ポートで起動する場合。
$ hoogle server --port 3000

ブラウザから http://localhost:3000/ を開くと、
見慣れたHoogleの画面が表示される。

EmacsでHoogle検索

EmacsからHoogleを直接検索できると便利だけど、誰か作っていないかな?
とりあえず、browse-url で検索文字列をHoogleに渡して、w3mで表示できると便利そうなので、作ってみた。

;;; w3mをデフォルトにする場合は以下をコメントアウトする
;;(require 'w3m-load)
;;(setq browse-url-browser-function 'w3m-browse-url)

(defun hoogle (keyword)
  (interactive "sKeyword:")
  (let ((url (format "http://localhost:3000/?hoogle=%s" keyword)))
    (browse-url url)))

M-x hoogle 検索文字列を入力すると、Emacs上に検索結果を表示する。
なかなか便利だけど、検索結果画面内のリンクの先は hackage.haskell.org なのか。
ここから先もローカルにできると良いのだけど。

参考