存在量化(existential quantification)を使わない方法。

data Animal = Animal { animalCall :: String }

dog :: Animal
dog = Animal { animalCall = "bowwow" }

sparrow :: Animal
sparrow = Animal { animalCall = "cheep" }

animals :: [Animal]
animals = [sparrow, dog, sparrow]

main = mapM_ (putStrLn . animalCall) animals

クラス階層(哺乳類と動物の関係とか)が必要ないなら、こっちが扱いやすいと思う。