Several days ago I suggested the guess how the existing implementions handle the overlapping instances. And the example was considered, with the modules F,G,E. >> [..] >> module G (g) >> where >> g :: Eq a => (a -> Bool) -> [a] -> [Bool] >> g h xs = map h xs >> [..] Jeffrey R. Lewis <[EMAIL PROTECTED]> noted that `Eq a =>' is unnecessary. > That fact that some argument passed to `g' might use equality > doesn't matter, because that is dealt with at the calling site. Thank you. This typo has some historic origin. Let us omit `Eq a =>', just not to lead beginner readers to the wrong programming style. So, it should be g :: (a -> Bool) -> [a] -> [Bool] g h xs = map h xs The whole example remains correct, I believe. ------------------ Sergey Mechveliani [EMAIL PROTECTED]