Hello, I was hoping that someone could answer a question I have about the type class system. In Haskell, I cannot write a term with an exact constraint:
data X = X bar :: Show X => X -> String bar x = show x
According to the Haskell 98 report, a qualifier can only be applied to type variables, but I don't see where the trouble is. The term seems to have reasonable type, and I don't see any reason why the dictionary-passing translation shouldn't work out; I am wondering what problems you run into if this restriction is lifted? Note, with GHC and Glasgow extensions you can write this program:
data Y a = Y foo :: Show (Y a) => Y a -> String foo x = show x
However, the first program is still ruled out. Are there any type-class experts out there that can offer an explanation? Thanks, Paul