2008年12月20日土曜日

Haskell の Prelude にある関数の定義を読みたい - ソースコードどこ?

1. 関数を検索する

a. Hoogle

Haskell のライブラリのドキュメントを読むときは、Haskell Hierarchical Libraries から辿ることができる

Haskell の関数を検索したいときは、Hoogle を利用している。

例えば、ここで foldl を検索すると、以下の URL のドキュメントが表示される。

URL に latest とあることから、最新のドキュメントが表示される。

ドキュメントには、ソースコードへのリンクが含まれる。

 

b. Hayoo!

Hayoo! でも、Haskell の関数を検索できる。

先ほどと同じく、foldl を検索したら、以下の URL のドキュメントが表示された。

Hayoo! の検索結果は、Hoogle と違う。こちらはには、ソースコードへのリンクがない。

 

2. 前のバージョンのドキュメント

以前のバージョンのドキュメントを見たい場合は、以下より各バージョンのドキュメントを辿れば良い。

例えば、foldl の定義を見ると、バージョンによって定義が少し違うことが分かる。

foldl        :: (a -> b -> a) -> a -> [b] -> a
foldl f z0 xs0 = lgo z0 xs0
             where
                lgo z []     =  z
                lgo z (x:xs) = lgo (f z x) xs

以前のバージョンの定義。

foldl        :: (a -> b -> a) -> a -> [b] -> a
foldl f z xs = lgo z xs
	     where
		lgo z []     =  z
		lgo z (x:xs) = lgo (f z x) xs

横道にそれるが、foldl の変数の定義の違いを見ると、新しいバージョンの定義では変数が覆い隠されるないように別名が使われている。こういう変数名の付け方は慣習になっているのかな?

 

3. ドキュメントが表示されない場合

Hoogle, Hayoo! で検索しても、ドキュメントを開けない場合、以下を参照。