On Fri, Oct 06, 2006 at 10:39:39AM -0500, Michael Shulman wrote:
> On 10/6/06, John Hughes <[EMAIL PROTECTED]> 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))

respectively.

        John

-- 
John Meacham - ⑆repetae.net⑆john⑈
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to