nobsun です。

>    Tray a -> Tray b などんな関数 f に対しても f Empty = Empty
> を意味する
>    _ Empty = Empty
> 的なことを書きたくなったのですが引数の方ではなく関数の方に
> 「_」を使ったことがなく書き方がわかりません。これはどう書い
> たらよいのでしょうか。

ちょっと意図が読めません。

data Tray a = Empty | Contains a

ですよね。

_ Empty = Empty 

これで、何のどのような性質のことを表現しようとしているのかが不明です。

すべての f :: Tray a -> Tray b について、Empty に「適用する」と
必ず Empty を返すような、「特別な」「適用(関数)」を考えることことは
できますけど。

tyfkApply :: (Tray a -> Tray b) -> Tray a -> Tray b
tyfkApply f Empty = Empty
tyfkApply f x     = f x 

Haskell のクラスは、型構築子(Tray)の性質であって、
データ構築子(Empty や Contains)の性質ではありません。
つまり、クラスで、Empty (これはデータ構築子) の性質を規定
することはできません。

--nobsun



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