&gt; In the case of error, assert and undefined, I wouldn&#x27;t class them as exceptions but as unrecoverable errors, as discussed in the linked wiki page.<p>Okay, but in the case of GHC you actually can recover from them.<p>&gt; I wasn&#x27;t aware of &#x27;throw&#x27; and that certainly weakens my argument. You could maybe argue it is an escape hatch in the same vein as unsafePerformIO, but I don&#x27;t know how it is viewed by the community.<p>Asynchronous exceptions are pretty widely accepted as the way to interrupt a long-running pure computation.  `error` is pretty widely used on identifying programming errors and pretty well reserved to that case.  There is some dispute over whether exceptions or Either is more appropriate to dealing with exceptional conditions in IO; more reluctance around exceptions for reporting exceptional conditions outside of IO (partly because of the &quot;only catch in IO&quot; restriction, and substantially because we have other, good methods).<p>&gt; What I wanted to get across is checked exceptions ala. Java (although they are too commonly bypassed in that example).<p>I&#x27;d like to see some language flesh out checked exceptions with parametric polymorphism.  Alack, this is not what Haskell has (yet?) done.