関数型プログラミング言語Haskell Part17
■ このスレッドは過去ログ倉庫に格納されています
0792デフォルトの名無しさん
2012/03/03(土) 17:22:56.38言っている事がいまいちよく分からないが・・・
instance宣言に型シノニムが使えないのは、
次のような記述ができないのと同じ理由だと思う
data TTT = Hoge Int
eq :: (Eq a) => a -> a -> Bool -- 誤った記述
eq (Hoge x) (Hoge y) = x == y
これができないのは、実際に表示されるエラーメッセージが示すように、
型変数 a を TTT 型と推論できないからだ
これを踏まえて Eq クラスのインスタンスにした場合を考えてみると、
instance Eq TTT where
-- (Eq a) => a -> a -> Bool
(Hoge x) == (Hoge y) = x == y
先ほどと同じ理由で、コメント部分の型シノニムの記述は誤り
かといって、TTT -> TTT -> Bool という型シノニムは、
Eq クラスのクラスメソッド (==) の型シノニムとは異なる
従って、型シノニムを「いかようにも書きようがない」
もし質問の意図が違うのだったら申し訳ない
■ このスレッドは過去ログ倉庫に格納されています