Haskellで型クラスを同一のリストに突っ込む

Haskellで、同じ型クラスだけど違う型のオブジェクトを、一つのリストとかにツッコんでその型クラスの関数に関してはmapとかできるようにしたいというのは、よくある願いだと思う。ていうかMonadiusつくった時にはそうする方法を知らんかったので仕方なく型を1種類だけにして全部突っ込んだのでえらいことになっていた。若気の至り

こないだ id:tanakh さんからアドバイスをもらってたのを試してみたら簡単にできた。

{-# OPTIONS -XExistentialQuantification #-}

data A = forall a. Show a => A a

instance Show A where
  show (A a) = show a

as = [A 2, A 2.0, A "hoge"]

main = do
  print as

narioでも解決済みだった。 http://d.hatena.ne.jp/mokehehe/20081002/gameobj