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

Reply via email to