.then(() => fetch(url))
.then(resp => anotherThing(resp))
By your definition, also this piece of code is declarative because it isn’t describing the how.
Simply chaining and hiding implementation details doesn’t make stuff declarative imho.
At line 2, similar to the redux-observable example, it’s stating “I want an HTTP request to occur here.”. But it’s still making a side-effect!
Unless you want to completely ignore the side-effects definition in the Wikipedia article about “declarative programming”…
A specific chain of observables can be either declarative or imperative. To me, if parts of the chain change the outside world, they’re imperative.
Cycle.js main functions are declarative because no parts of the chain ever change the outside world.