[m-dev.] Existentially quantified data constructors

Ralph Becket rafe at csse.unimelb.edu.au
Wed Apr 16 13:46:37 AEST 2008


Julien Fischer, Wednesday, 16 April 2008:
> 
> >(don't use equivalence types in instance declarations,
> 
> There is no such restriction, perhaps this was the one you were
> referring to?
> 
> 	The types in an instance declaration must not be abstract types
> 	which are elsewhere defined as equivalence types.

Yes, that's the one.

> >don't repeat variables in instance declarations, instance
> >variable arguments must be of the form typector(typevar, typevar, ...),
> 
> The reference manual already gives the reasons for these restrictions,
> from section 10.2
> 
> 	These restrictions ensure that there are no overlapping instance
> 	declarations, i.e. for each typeclass there is at most one instance
> 	declaration that may be applied to any type (or sequence of types).

Is this a necessary restriction or an artefact of our implementation?
Why isn't this rule relaxed with functional dependencies?

> >don't mix existentially and universally quantified variables in the same
> >constraint, etc.),
> 
> As Mark has alredy pointed out, this wouldn't work with our
> implementation of RTTI.
> 
> >but I'm damned if I can remember why any of those
> >restrictions are necessary. 
> >
> >It would be Very Helpful if for each
> >restriction we could provide a simple example somewhere of *why*
> >violating it leads to ambiguity/unsoundness/madness/divorce.
> 
> Ok, overlapping instances are bad because the implementation won't
> know what method to call.  The fourth case you list would presumably
> result in C code that wouldn't compile or something along those
> lines (assuming it gets through the rest of the compiler at all.)

Thanks for the explanation.
--------------------------------------------------------------------------
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