If I understand correctly, the problem with datatype contexts is that if we
have e.g.
data Eq a => Foo a = Foo a
the constraint Eq a is thrown away after a Foo is constructed, and any
method using Foos must repeat Eq a in its type signature.
Why were these contexts removed from the language, instead of "fixing" them?