たけをです。花谷さん、山下さん、ありがとうございました。


 なるほど、自分は2引数関数の合成だと思って混乱していたのですが、
(カリー化された)1引数関数の合成だと思って、順を追って考えれば
非常に明快な話なんですね。

 それじゃあ、(.)の定義なんてものすごく簡単じゃないか、と思って
Prelude.hsを覗いてみたら、本当に簡素な定義なんですね。いやはや。
# わざわざ書き出す必要もないかもしれませんが、一応…↓

(.)            :: (b -> c) -> (a -> b) -> (a -> c)
(f . g) x       = f (g x)

カリー化の威力ですね。

あと、
2004年12月27日(月)[12:27:16] に ”[haskell-jp:521] Re: 引数だけ渡すλ式 ” で
Nobuo Yamashita さんは書いたのであった。

> えっと、用語なんですが、Haskellではリスト(List)と配列(Array)とは区別して
> おかないと話が混乱しますよ。ここでは、たけさんが「配列」とおっしゃっている
> のは「リスト」あるいは「リストのリスト」ですね。
(中略)
> elem というPrelude 関数があるのでそれを使いましょう。

 この辺も了解です。

> hugs が、ちょっと「おばかさん」ということかしらん。ghci でやると、
> 
> Prelude> :t 
> \ s e -> s e /= [] :: forall t a.
>                       (Eq [a]) =>
>                       (t -> [a]) -> t -> Bool

 hugs (の:tコマンド) だと Eq a => ... となるのに、それとも違いますね。
 「リストがEqのインスタンス」⇔「要素がEqのインスタンス」という
ことなんでしょうか。でないと、双方で意味が変わっちゃいますよね。

---
IMAI Takeo <usitukai / osk.3web.ne.jp>


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