You're right, I had the wrong definition of purity and side-effects.
Nevertheless, the intuition remains. By allowing errors to be based on ⊥, types in Hask become less informative than they would be in just the Set category extended with infinite recursion (let's call it Set∞). Essentially it is much like using a Kleisli category of Set∞ with monad Either Error. This is very similar to what you get when allowing side-effects, which use the IO monad instead.
My confusion came from incorrectly thinking that a side-effect was anything not properly represented in the type system, and purity merely means "no side-effects".
Doubling down on jargon isn't going to help - it just shows how little you know to people who actually know these things. Choosing to publish an ignorant post and back it up with ignorant rebuttals is not endearing.
Haskell types are modeled as Domains and have all of those caveats. See:
The principle reason being that Domains model denotational semantics a la the category of Scott Domains as models of the lambda calculus. It's fairly easy to navigate around ⊥ if you think about your statements in any more depth than operationally.
Here is a list of questions for you to answer for yourself in order
Here is a good place to start for the last one:
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.