I'm not expert in effects either, but I prefer to restrict effects as much as possible and to introduce new effects via handlers. For example to use DOM you should init it via a `document`: 
```
withDocument :: forall eff a. Document -> Eff (dom :: DOM | eff) a -> Eff (eff) a
```