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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-prime