require containers >= 0.5 for Data.Map.traverseWithKey