[m-dev.] type classes --- thoughts?
Tyson Richard DOWD
trd at hydra.cs.mu.oz.au
Wed Mar 12 15:41:17 AEDT 1997
>
> Tyson Richard DOWD wrote:
> >
> > Haskell (or at least Hugs) allows you to define a type that `derives
> > Eq', which means it defines equality using standard syntactic equality.
> > If all `:- type' definitions were treated in this way, and another
> > definition, say `:- sort' (*) defined types without this equality, you could
> > have both normal, syntactic unification, and user-defined unification.
>
> What happens with regard to import/export of the implicit
> `type_class_instance' declarations?
I assume you mean what is the `export_status' of the unseen
`type_class_instance' that defines the unification method as the builtin
unify. Well, I think this could be considered to have the same status as
the definition of the type.
>
> Ada uses the term "limited type" for this sort of thing.
>
Here's a definition of `limited type' I found (for Ada):
A limited type is a private type that has no implicit operations. In
other words, you must declare all of the operations associated with a
limited type. Because assignment is not an implicit operation for
limited types, you cannot use limited types in all situations.
The definition seems to fit the usage ok - perhaps `:- limited_type'
would be a better declaration then.
> > Now, whether you want user-defined unification predicates is a little
> > harder to decide - but in the context of a language with type-classes,
> > their meaning is a little better defined - we simply assume that
> > anything in class `unifiable' has `=' defined on it, which is usually
> > the builtin unifier, but can be something else.
> >
> > Because the typeclass system defines a source-to-source transformation
> > (although it might not be implemented quite that way), the meaning of
> > the program is well defined, and reasonably clear.
>
> It's not that simple.
>
> Unification can be invoked implicitly, without any explicit `=', which
> makes it a bit different to ordinary typeclass methods.
> On concrete types, unification is a polymorphically moded language
> builtin; you can't replace it with a monomorphically moded
> typeclass method. Is the type class supposed to replace assignment
> unifications? Construction/deconstruction unifications?
> Complicated unifications? Just in-in unifications?
> Or just polymorphically typed in-in unifications??
Yes. I hadn't realized this needed polymorphic modes. Is that all you
need? I suppose a polymorphically moded typeclass method will
just be defined in terms of polymorphically moded language builtins,
and other polymorphically moded predicates, so is this the only
stumbling block?
What I mean is, would this work if we had polymorphic modes? Secondly,
if it did work, would it be worth it? I can see it would be useful in
some situations, but in general would it make programming easier, or
just add opportunities for confusion?
I think it is (initially) more important to have user-defined methods
for `compare' than `unify', and I suspect this will be a little simpler.
--
Tyson Dowd # "Well, let's just say, 'if your VCR is
# still blinking 12:00, you don't
trd at cs.mu.oz.au # want Linux'".
http://www.cs.mu.oz.au/~trd # --Bruce Perens, Debian's Fearless Leader
More information about the developers
mailing list