Два следующих фрагмента кода выглядят очень похожими. Однако должны быть некоторые различия, и я надеюсь, что кто-то может указать на них.
data Animal = Cat | Dog
speak :: Animal -> String
speak Cat = "meowh"
speak Dog = "wouf"
и
data Animal = Animal { speak :: String }
cat = Animal { speak = "meowh"}
dog = Animal { speak = "wouf" }