Proposal for stand-alone deriving declarations?

John Meacham john at
Mon Oct 30 00:17:15 EST 2006

On Fri, Oct 06, 2006 at 10:39:39AM -0500, Michael Shulman wrote:
> On 10/6/06, John Hughes <rjmh at> wrote:
> >deriving (Eq Foo, Ord Foo)
> >
> >instead of
> >
> >deriving (Eq, Ord) for Foo
> So what does
> newtype Foo a = Foo a
> newtype Bar b = Bar b
> class C a b
> deriving (C (Foo a) (Bar b))
> mean?  I could see it meaning any or all of the following:
> instance (C (Foo a) b) => (C (Foo a) (Bar b))
> instance (C a (Bar b)) => (C (Foo a) (Bar b))
> instance (C a b) => (C (Foo a) (Bar b))

this is why we should make this explicit when deriving "complex" newtype
instances, so we would write exactly the instance we want to derive:

> deriving (C (Foo a) b) => (C (Foo a) (Bar b))
> deriving (C a (Bar b)) => (C (Foo a) (Bar b))
> deriving (C a b) => (C (Foo a) (Bar b))



John Meacham - ⑆⑆john⑈

More information about the Haskell-prime mailing list