Haskell has lazy/lifted products and not true products.  This "feature"
is considered by many to be an unfortunate aspect of Haskell.  A 2-tuple
is just syntactic sugar for
  data Tuple2 a b = Tuple2 a b

Maybe from seeing this, it's clearer why laws such as
  x = (fst x,snd x)
do not hold.  Neither does the following law hold
   (uncurry . curry) f = f
which is unfortunate (for a language named after Haskell *Curry*).
To see why it doesn't hold, compare t1 and t2 in this program:
  f (_,_) = 1
  t1 = f undefined
  t2 = (uncurry . curry) f undefined

- Mark

On Wednesday, September 24, 2003, at 02:07 PM, Norman Ramsey wrote:
Consider the following Haskell function:

asPair x = (fst x, snd x)

This function has type forall a b. (a, b) -> (a, b) and is almost equivalent to the identity function, except it can be used to make programs terminate that might otherwise fall into a black hole.

My students are extremely mystified by such functions---and I can hardly
blame them! Is there a good place to read about programming with lazy
evaluation that will cover such functions and when to use them?



Norman _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell


_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell

Reply via email to