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