たけをです。

 最初から重なってるのがわかってるなら、data宣言を1つにしてしまうという手もありますね。

data Vector = Vector3 { vx :: Double,
                        vy :: Double,
                        vz :: Double
                      }
		| Vector4 { vx :: Double,
                        vy :: Double,
                        vz :: Double,
                        vw :: Double
                      }

ただこの場合、後から追加したdata宣言が重なった and 元の定義には(両方とも)手を加え
たくない、みたいな要求には応えられなさそうですけど。

On 10/10/05, Yuichi Yoshida <oxy / kmc.gr.jp> wrote:

> 型クラスを介さない関数のオーバーロードが有れば一発で解決なのですが、
> Haskellの作者さんはそれは美しくないとお考えなのでしょうか。

 というより、そういうのが仮にあったら、関数の静的な型チェックができなくなってしまいません?
最初のメールにあった data Vector3 と data Vector4 の間に型の関連は何もありませんし、
別々に存在させておいて同じ関数で扱う(関数をオーバーロードさせる)なら、結局型クラスか、
それに似た機構が必要になりそうです。
(外してたらすいません)

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

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