In article <20030412011736.952F.TETRYL / tokyoprogrammer.com>,
  Shinya Hayakawa <tetryl / tokyoprogrammer.com> writes:

> foo (x:xs)    = ...  はOKなのに
> foo (xs++[x]) = ...  という定義がエラーになるのは何故だろうと
> 疑問に思っていました。
>
> : と ++ は、同じくリストを生成しますが、後者はユニークに
> 定まらないのでリストコンストラクタになれないからだそうです。
> 当然といえば当然なのですが..感心してしまいました (^^;

ユニークに定まるかどうかは関係ないんじゃないでしょうか。あるリストに対
して、xs++[x] という式がそのリストを生成するような xs と x は高々ひと
つしかないという意味で、x:xs と xs++[x] は同程度のユニークさで x と xs
を定めると思います。

後者が使えないのは単にコンストラクタではないからというだけなんじゃない
かなぁ。

まぁ、それならなぜ foo (x+1) = ... と書けるのか、という話はありますが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

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