Malcolm Wallace <malcolm.wallace <at> me.com> writes: > > > > data Bar f a = Foo f => Bar {bar :: f a} > > The class context on the data constructor buys you nothing extra in terms of expressivity in the language. > All it does is force you to repeat the context on every function that uses > the datatype. For this reason, the > language committee has decided that the feature will be removed in the next revision of Haskell. > > Regards, > Malcolm >
"All it does is force you to repeat the context on every function that uses the datatype" I think that's exactly what the original poster is complaining about. As a real- life example, consider data Graph a = Ord a => G [a] [[a]] My intention is that whenever I have a Graph a, I want to be able to use the Ord instance on a. So suppose I now define automorphisms :: (Ord a) => Graph a -> [Permutation a] On the basis of the "don't repeat yourself" principle, it seems redundant to have to specify the (Ord a) context here, since I already specified it in the data constructor for Graph a. So this is a proposal for a change to the language: don't require a context on a function if it is already implied by a context on a data type. (This would make even more sense for newtypes, where we know there is exactly one data constructor, so no possibility of different data constructors requiring different contexts.) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe