I wrote:
|Thus, it would indeed be reasonable for the type of seq to determine
|that f x `seq` y is all right, whereas f `seq` y is not permissible.
|Similarly, I think it would be consistent to have unlifted products,
|but not give them data instances, so that (x,y) `seq` z is not allowed,
|the programmer needing to choose between x `seq` y `seq` z and
|y `seq` x `seq` z.
An equally reasonable approach would be to give such types instance
declarations like the following:
instance Data (a -> b) where
seq f x = x
instance Data (a,b) where
seq p x = x
Operationally, this would be like saying that any value of one of these
types is already in head normal form, I suppose.
--Joe