I've noticed a pattern in trying to make functional programming effective - there is still some kind of impure, effectful operation going on, but it gets holed up in a single, manageable imperative operation. For example, in Redux - the whole Redux store is a giant, mutable, singleton global variable. Normally we should be terrified to use such a monstrosity, but due to the way its framework has it neatly packed away in a safe, managed space, we can use it safely and have access to all its global, mutable, singleton benefits. Similarly Haskell - you return basically a data value (mind you a very complex data value) representing your program, to what is ultimately a mutable, global, single runtime that interprets and executes it. You still need the effect at some level, or it won't be useful.
So the idle musing is this - is there some sense, anywhere in the literature, where it is valid to look at even calling a function as being an effect of its own? And let's assume this is an otherwise pure function calling a pure function - is this just a part of the execution model we assume as pure enough to not count?