Warren makes an excellent point, though he doesn't highlight it:

        unlifted tuples are INCOMPATIBLE with seq

By "incompatible" I mean that you need parallel specualative evaluation
to implement it.  So a truly polymorphic seq is out.  That takes us back
to an overloaded version, except that seq couldn't have an instance for
(unlifted) tuples!

The reason for this is that we can't implement unlifted tuples directly at
all.  Instead, we simulate them by making pattern matching lazy, so that
_|_ behaves identically to (_|_,_|_), even though the two may have different
runtime representations.  The seq function exposes the trick!  That's why
Miranda fails in Warren's example.  

Is this what we want?

Simon

Reply via email to