On Friday 04 March 2011 22:33:20, Alexander Solla wrote: > > Unfortunately, Haskell's tuples aren't quite products.[1] > > I'm not seeing this either. (A,B) is certainly the Cartesian product of > A and B.
Not quite in Haskell, there (A,B) = A×B \union {_|_} _|_ and (_|_,b) are distinguishable. (A,()) contains - (a,()) for a in A - (a, _|_) for a in A - _|_ the three classes are distinguishable case x of (a,b) -> do putStrLn "Bona fide tuple" case b of () -> putStrLn "With defined second component" will produce different output for them. In Haskell, |(A,B)| = |A|×|B| + 1 (and |()| = 2, () = { (), _|_ }), and |(A,B,C)| = |A|×|B|×|C| + 1 etc. So one would expect |(A)| = |A| + 1 by consistency for 1-tuples. > In what sense are you using "product" here? Set theoretic or more general, category theoretic, I presume. > Is your complaint > a continuation of your previous (implicit) line of thought regarding > distinct bottoms? I don't think distinguishing bottoms is the issue, but distinuishing bottom from partially defined values. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe