overlapping instances and constraints

Niklas Broberg niklas.broberg at gmail.com
Tue Feb 28 17:16:56 EST 2006

On 2/28/06, Ben Rudiak-Gould <Benjamin.Rudiak-Gould at cl.cam.ac.uk> wrote:
> Simon Peyton-Jones wrote:
> > - A program that type checks can have its meaning changed by adding an
> > instance declaration
> >
> > - Similarly adding "import M()" can change the meaning of a program (by
> > changing which instances are visible
> >
> > - Haskell would need to be a lot more specific about exactly where
> > context reduction takes place.
> I think all of these problems would go away if overlap was permitted within
> a module but forbidden across modules. Are there uses of overlapping
> instances for which this isn't flexible enough?

Certainly! In HSP [1] there is a class (simplified here)

class IsXML xml where
  toXML :: xml -> XML

data XML = Element .... | CDATA String

that deals with how things should be represented as XML. There are a
number of basic instances for this, such as

instance IsXML String where

instance (Show a) => IsXML a where
 toXML = toXML . show

The intention of the latter is to be a default instance unless another
instance is specified. These instances can be found in the base HSP
module, but the idea is that HSP users should be able to work with
their own datatypes and only need to define the translation into XML
via instanciating IsXML. This would have to be done in the user
modules, so overlap across module boundaries are essential for this to
work. :-)


[1] http://www.cs.chalmers.se/~d00nibro/hsp/

More information about the Haskell-prime mailing list