Haskellのshowを再利用

http://d.hatena.ne.jp/hoge1e3/20080128

* 通常はデフォルトのshow を使って
* ある一部のクラスについてはshow をカスタマイズしたい

toStringじゃなくてshowにしてみました。

data Pair = Pair {car::Pair, cdr::Pair} | Null | Value Int

instance Show Pair where
    show (Pair x y) = "(" ++ show x ++ " . " ++ show y ++ ")"
    show Null = "()"
    show (Value x) = show x


main = putStrLn $ show $ (Pair (Value 1) (Pair (Value 2) Null))

僕もJava使いだったのでなんとなくわかるのですけど、
data Foo ..... deriving Showを
class Foo extends Show
みたいに思うのは間違いで、それに相当するのはどちらかというと
instance Show Foo where ...
なのだと思います。