I have found the above to be extremely useful for generically working with various types of Maps. Between them you basically get filtering, unioning and intersecting in a convenient and generic way.
I realize this means depending on witherable, these and semigroupoids. But alas the current Haskell orphan instances situation means that there isn't really a good way around that.