Now about “type safety” meme. Again, if the world consist only of numbers and abstract ideas, then, perhaps, it could make some sense. However, processes are not “linear”, classifications are not “tree-like” when everything is just this OR that. Reality is much more complex than that.
Such naivety manifests itself when packers are trying to “model” moderately complex systems. They think that “there is a Stream, so we could define a class with methods. While reading a stream we will get Either data OR Nothing” they say. “So as our code covers both "cases”, and the compiler checks the types of variables we are safe!“. OK, what they got instead is SIGPIPE signal, or EAGAIN error code or "connection reset by peer” state, which are of very different “type”.