
Once again I find myself wanting something like the following function with finite maps: fmToListByRange :: Ord key => FiniteMap key elt -> (key,key) -> [(key,elt)] fmToListByRange map (k1,k2) is supposed to return all elements in the map with keys from k1 to k2 (inclusive). Although this isn't as common as looking up an element by a key, it nevertheless is sometimes useful, and shouldn't be too hard to implement, given that FiniteMaps are going to be implemented (given the Ord constraint) as some sort of tree-like query structure, so it's just a question of scanning down the tree splitting the interval as you go. Of course this can be generalised. A general range would have type (Maybe key,Maybe key,Bool) where Nothing instead of a key would mean starting at one of the ends, and the Bool would indicate whether you gave the elements in increasing or decreasing order of key. In any case it looks fairly simple to write. If only I were set up to be able to compile GHC I could write the necessary code myself . . .