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