Skip to content
  • Simon Marlow's avatar
    [project @ 2003-06-19 10:42:24 by simonmar] · d89872a4
    Simon Marlow authored
    Add raiseIO# primop.
    
    This is part of ensuring that exceptions are *precise* in the IO monad
    (as opposed to imprecise exceptions in the pure world).  If we allow
    the strictness analyser to see the definition of throwIO:
    
      throwIO e = IO $ \s -> throw e
    
    then it might re-order evaluation in the IO monad, with the result
    that we get _|_ instead of an exception, or one kind of exception when
    we were expecting another.  We therefore must prevent the strictness
    analyser from doing these reorderings in the IO monad.  Hiding the
    definition of throwIO by making it a primop solves part of the problem
    (there's more to come).
    
    See SourceForge bug #752149.
    d89872a4