On Thu, Jun 9, 2011 at 09:46, DavidA <polyom...@f2s.com> wrote: > 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.
You can do this using GADTs. Like this: data Graph a where G :: Ord a => [a] -> [[a]] -> Graph a Now functions that pattern match on the 'G' constructor automatically have the Ord instance in scope, so it is no longer needed in the signature. Erik _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe