* Paul Keir <pk...@dcs.gla.ac.uk> [2009-05-29 10:47:26+0100] > Hi all, > > GHC is not happy with this: > > f = [] == [] > > nor this: > > f' = ([]::(Eq a) => [a]) == ([]::(Eq a) => [a])
Here, there's no guarantee that the answer will be the same independent of what 'a' you choose. Potentially, you could define different instances [Int] and [Bool] for Eq, so that [] == [] = True for [Int] but [] == [] = False for [Bool]. Actually, instance Eq [a] is defined parametrically on 'a', which implies that equality of lists depends only on equality of underlying types, therefore [] == [] should be constant, but compiler doesn't use this information. If you just want to test a list for emptyness, use 'null'. -- Roman I. Cheplyaka :: http://ro-che.info/ "Don't let school get in the way of your education." - Mark Twain _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe