>>651
>>649のAnimalはインタフェースを表現する型であって、
個々の動物の構造を反映するものじゃない。
「飛行高度」のフィールドをAnimalインタフェースを介してのみ
使う(飛行高度によって鳴き声が異なる、とか)なら
sparrow :: Height -> Animal
を用意するだけで十分だし、専用のインタフェースから使いたいなら、
data Sparrow = {- 専用インタフェース -}
sparrowAsAnimal :: Sparrow -> Animal
で良く、いずれにしてもAnimalの変更は必要ない。
ただし、後者の場合は、>>649に書いたように
型クラスを使ったほうが便利かもしれないけど。