TypeFamilies vs. FunctionalDependencies & type-level recursion

José Pedro Magalhães jpm at cs.uu.nl
Tue Jun 21 10:01:24 CEST 2011


2011/6/21 Simon Peyton-Jones <simonpj at microsoft.com>

> | One thing you could do to help in this specific case would be to use a
> | different M1 tag--e.g., M1 S ... for selectors and M1 NS ... for
> | fields without selectors (or K1 NS).  I presume you've already
> | considered this and/or it's too late to make such a change.  (Or to
> | move the distinction up to the constructor with two different
> | constructor tags, CR and CN for record and no-record.)
> I don't think it's too late to make a change.  The stuff has only just gone
> in, so it's still very malleable.  There may be other considerations, but
> legacy code isn't one of them!

I suppose that could be changed, yes, but what exactly are we trying to
solve here? One can already specify different behavior for constructors
with/without named fields. Are we trying to avoid OverlappingInstances? Then
yes, this might help, but I'm not sure this change alone would make all
generic programming possible without OverlappingInstances.

(Also, I always thought UndecidableInstances were "more evil", in some
sense, and this change does nothing to remove the use of
UndecidableInstances for generic programming.)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-prime/attachments/20110621/1f79cef6/attachment.htm>

More information about the Haskell-prime mailing list