higher-kind deriving ... or not

Tom Pledger Tom.Pledger@peace.com
Wed, 27 Feb 2002 08:59:26 +1300

C T McBride writes:
 | A little more tinkering, and it looks like it might be
 |   show :: Show (f (Wonky f)) => Wonky f -> String
 | Is this really the type of show?

That looks correct to me.

 | If so, no wonder there's a problem.

Yes, there's a vicious circle in context reduction, between Wonky Copy
and Copy (Wonky Copy).

 | I don't want to start an argument about how to solve this problem.  I
 | do want to suggest that, for the time being, it would be better to
 | reject `deriving Show' for type constructors like Wonky (ie those with
 | higher-kind parameters) than to generate instances which break the
 | compiler.
 | Or am I just being a spoilsport?

It depends on your definition of sport.  ;-)

> data Sport f
>   = Sport
>   | Association (f Bool)
>   deriving Show

> test = show (Sport :: Sport Maybe)