That is definitely right. For things involving the machine, doing things declaratively is wrong.
Also, thanks for telling about Koka. It sounds very interesting!
Also, thanks for telling about Koka. It sounds very interesting!
In addition there is also machines/pipes/conduits, which all mix imperative I/O with declarative style code in an interesting and new way.
What I was talking about is: almost all lower-level abstractions are designed with the view of computer as a state machine. If we are solving a problem at an abstraction low enough to make us deal with this analogy, it is easier not to have a declarative layer in between.
machines/pipes/conduits are all very interesting and I was going to mention them too, but I still don't think they solve this problem in the way OP was referring to.