title: Why is catching an exception non-pure, but throwing an exception is pure?
body: <p>In Haskell, you can throw an exception from purely functional code, but you can only catch in IO code.</p>
  
  <ul>
  <li>Why?</li>
  <li>Can you catch in other contexts or only the IO monad?</li>
  <li>How do other purely functional languages handle it?</li>
  </ul>