I think I am looking at the problem in a wrong way...

What I want to do is using higher-order functions with IO (or an IO-based transformer).

For example, let's say I want to apply a function to all the keys in a Map.
With pure functions, I would do:
  Map.mapKeys doSomething myMap

But let's suppose the function has a signature:
  doSomething :: a -> IO b

Is there an easy way to apply it?