On Sun, Oct 18, 2009 at 9:45 PM, Michael Snoyman <
michael@snoyman.com> wrote:
> While working on the next release of data-object, I wanted to represent some
> operations that might fail. The typical candidates were:
>
> 1) Maybe
> 2) Either
> 3) Monad
>
> Monad is always iffy because of the often times poorly defined fail. Maybe
> doesn't provide any means of reporting what the problem was. Either is not
> defined as a Monad in the base library. Also, the usual candidate of Either
> String only provides for an error message. It would be nice to have more
> in-depth information available.
>
> So I've put together a package I call "attempt". It defines a data type
> called (surprise) Attempt with a Success and Failure constructor. The trick
> here is that it using the new extensible exceptions under the surface, so
> you can report any kind of exception you want. It also provides a
> "FromAttempt" type class for possible conversion targets from an Attempt,
> provides an attempt function with some helpers for performing the equivalent
> of Control.Exception.catches, and provides two samples of functions I would
> want to implement with this library: attemptJoin and attemptLookup.
>
> My questions for the list are:
>
> 1) Is the overall approach sound, or do people have better ideas?
I think that there is a place for such a package. Given the Monad/fail issue,