
 The CurryHoward Isomorphism 
  However, this brings up an important point about the CurryHoward Isomorphism, which basically says that types are statements in firstorder logic, and the corresponding values are proofs of those statements. 
  This equivalence can be "proven" using the function: swap :: (a,b) > (b,a) swap (x,y) = (y, x) Which, using the CurryHoward isomorphism, is also a proof that /\ is commutative. 
  In short, just because a type "a" implies type "b", and type "b" implies type "a", doesn't mean they are interchangeable as statements are in logic. 
 www.haskell.org /pipermail/haskellcafe/2002August/003300.html 
