I think you want the set union here (not simply array addition; that will include duplicates).  I'd do:

``` ruby
formatter_class.ancestors.inject(Set.new) do |notifications, klass|
  notifications | Loader.formatters.fetch(klass) { Set.new }
end
```

I don't think see the need for `compact`, either.

BTW, for `Hash#fetch`, I tend to use the `hash.fetch(key, default)` form only if `default` is a cheap singleton object like `true`, `false`, `nil`, a symbol, etc.  The block form is nice in that it is lazy so you don't waste memory instantiating the set if you don't need it.