instance heads (was Re: DData modules)
ross at soi.city.ac.uk
Fri Jan 14 11:15:38 EST 2005
On Thu, Jan 13, 2005 at 02:56:31PM +0000, Ross Paterson wrote:
> On Thu, Jan 13, 2005 at 02:13:08PM +0000, Malcolm Wallace wrote:
> > In what sense is
> > instance Monoid (a -> a)
> > not Haskell'98? It looks perfectly OK to me. Is it because the two
> > type variable arguments to (->) are the same?
> Yes -- the Report even makes an example of instance C (a,a).
> But it seems that nhc98 implements this extension.
Nhc98 doesn't really implement it. Try
class C a where twist :: a -> a
instance C (a,a) where twist (x,y) = (y,x)
main = print (twist ('a',True))
which is incorrectly accepted, causing runtime trouble. Also, the other
two examples in that section of the Report cause compile-time crashes:
instance C (Int,a)
instance C [[a]]
More information about the Libraries