Data.Map (in ghc-6.4) has instances for Ord and of Show (which FiniteMap didn't have). What does Ord guarantee? I hope it is a total ordering compatible with (==) (so that Maps could be elements of Sets etc.) If so, perhaps there should be a comment in the documentation. From reading the source ghc-6.4/libraries/base/Data/Map.hs it is not clear why Eq uses toAscList but Ord uses toList - so perhaps there is some hidden magic? What if I don't like the Show instance? (That seems to be a fundamental question of library design/usage.) I prefer to have show x return some string that can be pasted back into the source code (!) and gives the correct result. So, for FiniteMap I had sth. like show fm = "listToFM [ (1, True), (2, False) ]" It seems I cannot hide the Show instance from Data.Map (it is always in scope, http://www.haskell.org/onlinereport/modules.html#sect5.4) Perhaps it would be better to have the Show instance in a separate module (that is not automatically imported). Because if I want to use a Map with my preferred Show instance now, I would have to declare my own newtype and instantiate that. - Maybe that's better design anyway (not exposing the concrete implementation). It still fixes one implementation, though. The next step would be to use a type class, but this severely blows up the type signatures. With this respect, "corresponding" Java programs really look better, allowing Map<Foo,Bar> f = new HashMap<Foo,Bar>(); where Map is the interface, and HashMap is one implementation, and the rest of the program only knows that f implements the interface. Yes I know that syntax is only possible because their type classes (interfaces) have exactly one parameter ... Best regards, -- -- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 -- ---- http://www.imn.htwk-leipzig.de/~waldmann/ -------