いわゆるポリモーフィズムみたいなコトをしたいんだけど、

class Animal a where
call :: a -> String

data Dog = Dog
instance Animal Dog where
call a = "bowwow"

data Sparrow = Sparrow
instance Animal Sparrow where
call a = "cheep"

みたいなのがあって、

animals = [Sparrow, Dog, Sparrow]
main = foldr1 (>>) (map (putStrLn . call) animals)

だとリストの中身の型が統一されていないってエラーになる。
型クラスはJavaのインターフェイスに似てるって「ふつうの」で読んだけど、
DogもSparrowもAnimalなんだから[Animal]のリストに入れられないの?
というかAnimalという型ができるわけじゃないのかな。
自分Java上がりなんだけど、Javaみたいな考え方がHaskellに通用しなくてまいった