Make an Execution[T] type, which is a monad, which makes composing Jobs easy.

I  would say, that is not map, that is foreach. Map is pure. We make the assumption that mapping functions are pure all the time.

By the way, what kind of side-effect would be safe to apply?