Correct me if I\'m wrong, but it seems like algebraic data types in Haskell are useful in many of the cases where you would use classes and inheritance in OO languages. But
First, as counterpoint to Charlie's answer, this isn't intrinsic to functional programming. OCaml has the concept of open unions or polymorphic variants, which essentially do what you want.
As for why, I believe this choice was made for Haskell because
So if you'd rather have a data Color r b g = Red r | Blue b | Green g
type, it's easy to make, and you can easily make it act like a monad or a functor or however other functions need.