[Haskell-cafe] What unsafeInterleaveIO is unsafe

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Mon Mar 16 18:01:17 EDT 2009


On Mon, 2009-03-16 at 14:17 -0700, Jonathan Cast wrote:
> On Mon, 2009-03-16 at 22:12 +0100, Henning Thielemann wrote:
> > On Sun, 15 Mar 2009, Claus Reinke wrote:
> > 
> > > import Data.IORef
> > > import Control.Exception
> > >
> > > main = do
> > >   r <- newIORef 0
> > >   let v = undefined
> > >   handle (\(ErrorCall _)->print "hi">>return 42) $ case f v of
> > >     0 -> return 0
> > >     n -> return (n - 1)
> > >   y <- readIORef r
> > >   print y
> > 
> > I don't see what this has to do with strictness. It's just the hacky 
> > "exception handling" which allows to "catch" programming errors.
> 
> And which I have a sneaking suspicion actually *is* `unsafe'.  Or, at
> least, incapable of being given a compositional, continuous semantics.

See this paper:

"A semantics for imprecise exceptions"
http://research.microsoft.com/en-us/um/people/simonpj/papers/imprecise-exn.htm

Basically if we can only catch exceptions in IO then it doesn't matter,
it's just a little extra non-determinism and IO has plenty of that
already.

Duncan



More information about the Haskell-Cafe mailing list