[Haskell] Re: installing streams library

Benjamin Franksen benjamin.franksen at bessy.de
Fri May 26 06:13:35 EDT 2006


On Thursday 25 May 2006 11:36, Bulat Ziganshin wrote:
> Hello Ross,
>
> Wednesday, May 24, 2006, 4:50:39 PM, you wrote:
> >> Now you could make purely functional code raise I/O exceptions,
> >> but that gives rise to a few problems: imprecise exceptions are
> >> difficult to program with (need deepSeq etc.), and they aren't
> >> widely implemented (Hugs doesn't have them, JHC doesn't have them
> >> and may not get them IIUC).
> >
> > Hugs has had imprecise exceptions (but not asynchronous ones) since
> > Nov 2003.
>
> can you please explain or give a pointer - what is an imprecise
> exceptions? i thought that it the synonym for async ones

It's explained here

http://research.microsoft.com/~simonpj/Papers/except.ps.gz

Imprecise exceptions are abotu how you handle exceptions coming from 
pure code, like devide-by-zero and such. Imagine

 x = (something/0) + (something_else/0)

then which of the two subexpressions is the exception "divide by zero" 
associated with? This is not clear in a non-strict language like 
Haskell, where evaluation order is not specified. Imprecise exceptions 
are a way around that by (conceptually) including /all/ 'possible' 
exceptions into a /set/. However, this set is not observable. Only when 
catching an imprecise exception, which /must/ happen in the IO monad, 
can be consult an external 'oracle' that choses just one representing 
element of the set. Of course in a practical implementation this 
element will be determined by the actual evaluation order.

Ben
-- 
You've never looked into my eyes but don't you want to know
What the dark and the wild and the different know -- Melissa Etheridge


More information about the Haskell mailing list