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

Reply via email to