nobsun です。

使用例があるのが、いいですねぇ。

で、ちょっと気づいたことなど。

>     foldr (f init xs) :: (a -> b -> b) -> b -> [a] -> b    PRELUDE

この表現は凄く違和感がありますし、誤解されると思います。
型を表現するなら、定義のとおり、

foldr :: (a -> b -> b) -> b -> [a] -> b  

と書くべきでしょう。また、foldr f init xs と foldr (f init xs) とでは意味が
全くちがうのに、この表記だと同じものと誤解されてしまうとおもいます。
更に、関数はすべてカリー化されているので、たとえば、foldr は 3 引数である
と主張しているように見える表記にも、違和感があります。Haskell では
「関数 hoge は n 引数である」という主張にはあまり意味がないと思います。
むしろ、Haskell ではすべての関数は一引数であるとの主張が正しいでしょう。

>         xs の最後の要素と init から始めて、
>         xs の後ろから二番目の要素と最初の返り値、

この部分は、言葉での説明よりは、

foldr f init []     = init
foldr f init (x:xs) = f x (foldr f init xs)

のように定義がそのまま書いてある方がわかりやすいと思います。これは
 Haskell では、プログラムは宣言的に書く(つまり、何を計算する
かを書く)ので、その関数がなにをするのかという情報は、定義そのものに
含まれています。それをわざわざ命令的に書く(つまり、計算の手順を書く)と
逆に何を計算するのかが分りにくくなるように思います。Haskell のような
Lazy な処理計では、計算の順序を考えることは、非常に難しいことで、
正確な説明にならなくなる場合があります。たとえば、foldr を例にとると、

  and xs = foldr (&&) True xs

のような定義の場合

>         xs の最後の要素と init から始めて、
>         xs の後ろから二番目の要素と最初の返り値、

の説明のように「init から始めて」という表現は不正確でしょう?

href で重要な部分は、使用例だと思います。これがあるから、href は
大変すばらしいツールになるのだと思います。
(この部分が、Haskell のリファレンスでもすっとも重要だと感じますし、
実際この部分がいちばん希求されているものだと思います。)

> [バグ]
> 
> 死ぬほど遅い。

そうですかぁ。(Haskell の遅さにはなれてしまったので。。。)
ghc でコンパイルしてしまえば。。。

と安易にも考えたのですが、Hugs の hierarchical library の扱いは、
ghc のそれと非互換な部分がありますねぇ。

--
Nobuo Yamashita                 mailto:nobsun / sampou.org
  I love programming.           http://www.sampou.org/
  I love pencil puzzles.        http://www.puzzle.jp/


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/