MPTCs and functional dependencies

Simon Peyton-Jones simonpj at
Tue Mar 28 08:32:04 EST 2006

My current take, FWIW.

* MPTCs are very useful.  They came along very rapidly (well before
H98).  I think we must put them in H'

* But MPTCs are hamstrung without FDs or ATs

* FDs and ATs are of the same order of technical difficulty, as Martin

* ATs are (I believe) a bit weaker from the expressiveness point of view
(zip example), but are (I believe) nicer to program with.  

* BUT we have way more experience with actually programming with FDs.
ATs fail the "well-established" test by a mile.

* Largely due to Martin's work, we now have a much better handle on just
what restrictions on FDs make type inference tractable.  So I believe
there is a solid MPTC+FD story that we could embody in H'.

* Medium term, I think ATs may *at the programming-language level*
displace FDs, because they are nicer to program with.  But that's just
my opinion, and we don't have enough experience to know one way or the

Tentative conclusion: H' should have MPTC + FDs, but not ATs.


| -----Original Message-----
| From: haskell-prime-bounces at
[mailto:haskell-prime-bounces at] On Behalf Of
| Ross Paterson
| Sent: 02 February 2006 11:25
| To: haskell-prime at
| Subject: MPTCs and functional dependencies
| On Thu, Feb 02, 2006 at 11:38:07AM +0100, John Hughes wrote:
| > The problem with Haskell 98 is that it *lacks* features which
| > have become absolutely essential to Haskell programmers today. Those
| > features are what really *need* discussion and energy spent on them.
| >
| > [...]
| >
| >    Multi-parameter classes with functional dependencies
| >       - used everywhere... for example in monad transformers... so
| >         *must* be included this time
| >       - omitted from Haskell 98 because "the right design" wasn't
| >       - it's still unclear! Functional dependencies *in some form*
| >         are essential, but associated types and datatypes look nicer
| >         in many ways!
| >       - is it too late, in practice, to replace fundeps by something
| >         else? How will we know? If we are to standardize on
| >         types instead, we need a major effort to *make sure* all
| >         important applications of fundeps can be represented. How
| >         we organize that?
| I agree that MPTCs are much less useful (though not completely
| without something like FDs or associated types.  But the specification
| of FDs is far from clear: the system described in Mark's paper is
| a bit weaker than what is implemented by GHC and (more shakily) by
| It seems that associated types aren't ready yet, but I don't think FDs
| are either, accustomed as people are to them.
| I have another worry about MPTCs.  They require require relaxations on
| the form of instances (FlexibleInstances on the wiki), which in turn
| require relaxations on contexts and thus deferred context reduction
| FlexibleContexts).  The result is that missing instances get reported
| later than they do now.  MPTCs are very useful and probably necessary,
| but there is a cost.
| _______________________________________________
| Haskell-prime mailing list
| Haskell-prime at

More information about the Haskell-prime mailing list