Haskell programmers like to tell people that in other languages if you use some library and that library launches a nuclear missile, you wouldn't know.
Turns out you wouldn't know necessarily in Haskell either. If you use any significant framework, there is a good chance you use its provided monad stack, which if contains
IO, can launch a nuclear missile.
To this end,
IO in Haskell is like
unsafe in Rust. It significantly reduces audit surface, but you still need to be vigilant to audit it. Perhaps not surprisingly, the way Rust markets its safe subset is similar to how Haskell markets its pure subset.