the MPTC Dilemma (please solve)

Martin Sulzmann sulzmann at comp.nus.edu.sg
Mon Mar 20 02:40:36 EST 2006


Manuel M T Chakravarty writes:
 > The big question is: do we really want to do logic programming over
 > types?  I'd say, no!

With ATs you're still doing logic programming if you like or not.

As Ross Paterson writes:
 > I agree that functions on static data are more attractive than logic
 > programming at the type level.  But with associated type synonyms,
 > the type level is not a functional language but a functional-logic one.

The point is here really that you may think you define
a type function, e.g.

type F [a] = [F a]

though, these type definitions behave more like relations,
cause (type) equations behave bi-directionally.


Manuel M T Chakravarty writes:
 > My statement remains:  Why use a relational notation if you can have a
 > functional one?

Because a relational notation is strictly stronger. 

Some time ago I asked the following:

Write the AT "equivalent" of the following FD program.

zip2 :: [a]->[b]->[(a,b)]
zip2 = ... -- standard zip
class Zip a b c | c->a, c->b where
 zip :: [a]->[b]->c
instance Zip a b [(a,b)] where                    -- (Z1)
 zip = zip2
instance Zip (a,b) c e => Zip a b ([c]->e) where  -- (Z2)
 zip as bs cs = zip (zip2 as bs) cs

Specifying the FD improvement conditions via AT type functions
is a highly non-trivial task.
Check out Section 2 in
[October 2005]  Associated Functional Dependencies 
http://www.comp.nus.edu.sg/~sulzmann/
for the answer.

Sure, ATs provide a nice syntax for a specific kind of type class
programs.  Though, as I've pointed out before any AT program can be
encoded with FDs but the other direction does not hold necessarily.
See the above paper for details.


Manuel M T Chakravarty writes:
 > > ------------------------------------------------------------
 > > From: Martin Sulzmann <sulzmann at comp.nus.edu.sg>
 > > Subject: MPTC/FD dilemma 
 > > 
 > > - ATs (associated types) will pose the same challenges.
 > >   That is, type inference relies on dynamic termination checks.
 > 
 > Can you give an example?


There's nothing wrong with ATs as described in the ICFP'05 paper.
The problem is that some "simple" extension easily lead to undecidable
type inference.

Recall the following discussion:
http://www.haskell.org//pipermail/haskell-cafe/2006-February/014609.html

The point here is really that type inference for ATs and FDs is
an equally hard problem:
http://www.haskell.org//pipermail/haskell-cafe/2006-February/014680.html


Another thing, here's an excerpt of the current summary of the MPTC
dilemma from
http://haskell.galois.com/cgi-bin/haskell-prime/trac.cgi/wiki


Multi Parameter Type Classes Dilemma ¦

    Options for solving the dilemma ¦   
        2. Put AssociatedTypes on the fast-track for sainthood

Associated Types ¦

   Cons ¦   
    * Only a prototype implementation so far 

This is a *inaccurate* and highly *misleading* summary.

Without some formal argument you cannot simply say that ATs are
"better" than FDs. In some situations, ATs may have a better syntax
than FDs. Though, this is a matter of taste. More seriously, ATs
require the programmer to write *all* improvement rules
explicitly. This can be a fairly challenging task. See the above "zip"
example.

I understand that you want to push ATs. It's a good thing to seek
for alternatives. But typing and translating ATs is as challenging
as typing and translating FDs (I've left out the translation issue,
cause this leads to far here).

Martin



More information about the Haskell-prime mailing list