[m-dev.] Type class instance constraints

Julien Fischer juliensf at csse.unimelb.edu.au
Tue May 22 14:48:12 AEST 2007

On Tue, 22 May 2007, Simon Taylor wrote:

> On 22-May-2007, Ralph Becket <rafe at csse.unimelb.edu.au> wrote:
>> We currently have a number of restrictions on what can appear in an
>> instance declaration, namely that
>> - each parameter takes the form type_name(TypeVar1, TypeVar2, ...)
>> - all TypeVars are distinct.
>> These restrictions are there to prevent ambiguity with overlapping
>> instance declarations.  In practice we can only check for overlapping
>> instance declarations in different modules at link-time.  Given that
>> is the case, why can't we lift both restrictions and simply check for
>> ambiguity at link time?  It would make the type class system much more
>> useful.  Currently the first restriction means you have to define no-tag
>> types all over the place and the second restriction prevents much useful
>> polymorphism.
> I think the problem is the amount of work needed to alter the RTTI system
> throughout the compiler and runtime.  Removing the restrictions will cause
> big changes in the way we extract type-infos from typeclass-infos at runtime,
> although that doesn't always work properly now even with the restrictions.

That's one of the reasons we're getting rid of the packing type_infos
into typeclass_infos thing.

mercury-developers mailing list
Post messages to:       mercury-developers at csse.unimelb.edu.au
Administrative Queries: owner-mercury-developers at csse.unimelb.edu.au
Subscriptions:          mercury-developers-request at csse.unimelb.edu.au

More information about the developers mailing list