[mercury-users] Type class usage question

Ralph Becket rafe at cs.mu.OZ.AU
Mon Apr 5 14:11:53 AEST 2004


Peter Hawkins, Monday,  5 April 2004:
> What's wrong with this?
> 
> :- module test.
> :- interface.
> :- import_module set.
> :- typeclass foo(C) where [].
> :- instance foo(set(int)) where [].
> :- implementation.
> 
> Compiling this gives:
> Error: expected type in instance declaration to be a functor with variables
> as args: set(int).

The problem with `instance foo(set(int))' is that somewhere else someone
might declare `instance foo(set(T))' making it impossible for the
compiler to resolve which foo method calls should be made for set(int).

> test.m:001: In module `test':
> test.m:001:   warning: module `set'
> test.m:001:   is imported in the interface, but is not
> test.m:001:   used in the interface.
> For more information, try recompiling with `-E'.
> 
> But if I change the instance declaration to this:
> :- type set_of_int == set(int).
> :- instance foo(set_of_int) where [].
> 
> the code compiles.

Ahh, that looks like a compiler bug to me.  Does anyone amongst the
developers think differently?

-- Ralph
--------------------------------------------------------------------------
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the users mailing list