[Haskell-cafe] Re: Exception handling when using STUArray
Ben Franksen
ben.franksen at online.de
Thu Mar 13 16:18:03 EDT 2008
Luke Palmer wrote:
> On Wed, Mar 12, 2008 at 4:45 PM, Donn Cave <donn at avvanta.com> wrote:
>> Well, the problem inherently requires a certain order of
>> evaluation. But if you will just handle pattern match failure
>> in the IO monad, then you can write a simple functional
>> expression of the problem instead,
>>
>> let (i, s') = decodeInt s in
>> let (v, _) = decodeInt s' in
>> (i, v)
>>
>> ... where I think `i' can be evaluated without forcing unnecessary
>> evaluation of v. It's clearer, and avoids unnecessary strictness!
>
> Unless of course you don't have an IO monad handy.
>
> The issue is that exception handling semantics do induce an order of
> evaluation for determinacy: if both functions in a composition throw
> an exception at some point (say in the 3rd element of a list they're
> generating), you need to decide which exception ends up being thrown,
> and to do that based on the lazy evaluation order would break
> referential transparency.
>
> It bugs me a little how good Haskell is with laziness, but how bad it
> gets when you need laziness with a slightly different structure. I
> don't see any way it could reasonably be "fixed" if I were designing
> my own language, it's just unsettling.
Isn't this what "imprecise exeptions" were invented (and implemented in GHC)
for? See
http://research.microsoft.com/Users/simonpj/Papers/imprecise-exn.htm
Cheers
Ben
More information about the Haskell-Cafe
mailing list