
Chaddaï Fouché-2 wrote:
2008/3/30, Bulat Ziganshin
: although the last alternative, (Branch l r) <= (Branch l' r') = l == l' && r <= r' || l <= l' seems suspicious to me. isn't it the same as (Branch l r) <= (Branch l' r') = l <= l'
Yes, it should be : (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r'
Lexical order for a tuple (a,b) is : (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) The same idea can be applied to list (where Nil is strictly less than anything else) or other datatypes.
-- Jedaï _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Chaddaï Fouché-2 wrote:
2008/3/30, Bulat Ziganshin
: although the last alternative, (Branch l r) <= (Branch l' r') = l == l' && r <= r' || l <= l' seems suspicious to me. isn't it the same as (Branch l r) <= (Branch l' r') = l <= l'
Yes, it should be : (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r'
Lexical order for a tuple (a,b) is : (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) The same idea can be applied to list (where Nil is strictly less than anything else) or other datatypes.
-- Jedaï _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Quoted from: http://www.nabble.com/lexicographic-order-tp16381434p16388762.html Thanks for your help...I feel so embarrassed. With all of these symbolos in Haskell like -> (for types), => (in classes) etc I couldn't imagine that <= means less than or equal to!!!:clap:
Yes, it should be : (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r'
Lexical order for a tuple (a,b) is : (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b'))
I have tested it and I have found that it is the same with (Branch l r) <= (Branch l' r') = (l == l' && r <= r') || l < l' The problem with the previous is that the compiler during the parsing takes as right (Branch l r) <= (Branch l' r') = l == l' && (r <= r') || l < l') since the infix operator && needs two operands,i.e. one on the left and the other on the right Though I can't understand why both (Branch l r) <= (Branch l' r') = l < l' || l == l' && r <= r' (Branch l r) <= (Branch l' r') = l <= l' || l == l' && r <= r' give the same results and why I should take as right (a,b) <= (a',b') iff (a < a' or (a == a' and b <= b')) and not (a,b) <= (a',b') iff (a <= a' or (a == a' and b <= b')) The latter seems more logical, doesn't it? -- View this message in context: http://www.nabble.com/lexicographic-order-tp16381434p16392557.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.