[Haskell-cafe] Exception handling when using STUArray
Henning Thielemann
lemming at henning-thielemann.de
Thu Mar 13 02:35:19 EDT 2008
On Wed, 12 Mar 2008, Donn Cave wrote:
> On Mar 12, 2008, at 2:10 PM, Henning Thielemann wrote:
>
>> On Wed, 12 Mar 2008, Donn Cave wrote:
>>
>>> On Mar 12, 2008, at 12:32 PM, Brandon S. Allbery KF8NH wrote:
>>>
>>>> On Mar 12, 2008, at 14:17 , Donn Cave wrote:
>>>>> Sure. It isn't a lot of code, so I subjected it to Either-ization
>>>>> as an experiment, and I did indeed take the monad procedural route.
>>>> Monad != procedural, unless you insist on do notation. Think of it as
>>>> composition (it may be easier to use (=<<) which "points the same
>>>> direction" as (.)).
>>>
>>> Yes, I insist on do notation, because it provides a convenient
>>> binding form that works with what I'm doing - the original functional
>>> variation wasn't so suited to composition either, and used `let'.
>>>
>>> But I see that as only syntactic - equally procedural, either way.
>>> Expressions are evaluated in a fixed order,
>>
>> Do notation only looks like there are statements that are processed from
>> the beginning to the end. But that's not true, it's still purely lazy and
>> expressions are evaluated in the order that is forced by data dependencies.
>
>
> Let me put it this way: if I write
>
> do
> (i, s') <- decodeInt s
> (v, _) <- decodeInt s'
> return (i, v)
>
> ... instead of, to just avoid the monad stuff
>
> case (decodeInt s) of
> Left e -> Left e
> Right (i, s') -> case (decodeInt s') of
> Left e -> Left e
> Right (v, _) -> Right (i, v)
Since the decision between Left and Right requires all parts to be
evaluated, it's Either that might too strict for your application. What
about a writer monad, where exceptions, or better say warnings, are
written to the writer stream?
More information about the Haskell-Cafe
mailing list