理想未来ってなんやねん

娘可愛い。お父さん頑張る。

Haskellのリファレンスマニュアルを検索するツール href

新しいことを勉強したり、分からないことを調べる時、マニュアルは重要です。
hrefは、ふつうのHaskellプログラミングの著者の青木さんの作られたHaskellのリファレンスマニュアルを検索するツールです。

使い方

hrefの使い方は以下の通り

引数なしだとドキュメントの存在するモジュールを表示します。

$ href
Control.Exception Control.Monad Data.Char Data.List Data.Maybe
Data.Tuple Debug.Trace Prelude System.Directory System.Environment
System.IO Text.ParserCombinators.Parsec.Char
Text.ParserCombinators.Parsec.Combinator Text.Regex

引数が一つのときは、先頭が大文字ならモジュール、小文字なら関数とみなして補完検索します。

$ href drop
Prelude.drop
drop :: Int -> [b] -> [b]
drop n xs

    リスト xs の最初の (最大) n 要素を除いたリストを返す。

    see also: take, takeWhile, dropWhile, splitAt

	drop 3 [1,2,3,4,5]   = [4,5]
	drop 3 [1,2,3,4]     = [4]
	drop 3 [1,2,3]       = []
	drop 3 [1,2]         = []
	drop 3 []            = []

	drop 2    [1,2,3]    = [3]
	drop 1    [1,2,3]    = [2,3]
	drop 0    [1,2,3]    = [1,2,3]
	drop (-1) [1,2,3]    = [1,2,3]

引数が二つのときはモジュール名と関数名だとみなします。

$ href data.l isp
Data.List.isPrefixOf
isPrefixOf :: (Eq a) => [a] -> [a] -> Bool
isPrefixOf xs ys

    xs が ys の先頭と一致するならば True。

	isPrefixOf [1,2] [1,2,3,4]   = True
	isPrefixOf "abc" "abcdefg"   = True
	isPrefixOf "abcdefg" "abc"   = False
	isPrefixOf "" "string"       = True
	isPrefixOf "string" ""       = False
	isPrefixOf "" ""             = True

ダウンロード

ダウンロードは以下のURLから出来ます。

http://i.loveruby.net/ja/projects/href/

インストール

インストールは、README.jaに書いてある通りに行えば行えますが、文字コードISO-2022-JPEUC*1なので、MacUTF-8の環境で使う場合は変換が必要です。

Macでのインストール手順例を以下に示します。

$ wget http://i.loveruby.net/archive/href/href-0.3.3.tar.gz
$ tar xzf href-0.3.3.tar.gz
$ cd href-0.3.3
$ make 
$ mkdir -p /usr/local/share/href
$ mkdir ref-utf8
$ cd ref
$ for i in *; do nkf --utf8 $i > ../ref-utf8/$i; done
$ cd ..
$ sudo su
# export HREF_DATADIR=/usr/local/share/href
# make bindir=/usr/local/bin install
# mkhref ref-utf8/*

あとは.bash_profileにHREF_DATADIRをexportするように書いておきます。

そんな感じです。

*1:Control.ExceptionがISO-2022-JPで、Control.MonadEUCだったりと、なぜか統一されていない謎仕様。変換にnkfを使うのはiconvだとうまく自動認識してくれない為