Haskell's obsession with purity is a double-edged sword - while it forces you to write composable, predictable code, it can also make everyday tasks like input/output a frustrating exercise in monad wrangling.