存在型+型クラスでduck typing. 参照:http://www.haskell.org/haskellwiki/Existential_type 既に言及されてますが、このやり方だとHaskellはnonintrusive-explicit-dynamic に該当しますね。 テーブル修正しました。 class Duck a where quack :: a -> IO () data Dog = Dog data Cat = Cat -- non-instrusive -- -- 犬はアヒルだ instance Duck Dog where quack _ = putStrLn "wuff!" -- 猫もアヒルだ instance Duck Cat where quack _ = putStrLn "meow." data DuckObj = forall a. Duck a =>