It might help to recall some terminology from domain theory. I assume
here that all domains are pointed, i.e., have a bottom element. (John
Launchbury's note refer to a semantics with unpointed domains).
1. Products, a \times b.
These are unlifted products, with (\bot,\bot)=\bot, and with
(a,b) \neq \bot if a \neq \bot or b \neq \bot.
2. Smash products, a \otimes b.
These are unlifted products, with (a,\bot) = \bot and (\bot,b) = \bot.
3. Lifted products, (a \times b)_\bot.
These are what Haskell has currently.
Observe that 1 and 2 satisfy the law
(a,(b,c)) = ((a,b),c)
However, only 1 satisfies the law
(a,b) -> c = a -> b -> c.
(So consider yourself corrected, Paul! :-) Cheers, -- P