#2309: containers: specialize functions that fail in a Monad
to Maybe
Ross Paterson
ross at soi.city.ac.uk
Tue May 27 17:57:50 EDT 2008
On Sun, May 25, 2008 at 07:58:44AM -0400, Dan Doel wrote:
> I don't think we should get rid of fail. There's nothing wrong with it, per
> se. It just shouldn't be in Monad, it should be in MonadPlus (or MonadZero if
> things get split back up 1.4 style). fail is mzero that takes a string to
> explain what happened.
No, it's a different value: one can write programs that distinguish them.
Haskell 98 treats error "string" as _|_ only because it can't analyse _|_.
> [...] The problem is calling fail in monads
> that don't have an mzero, because they don't have a notion of failure.
That is indeed part of the problem, because someone will define an
instance for those monads, for the sake of convenience.
> I didn't mean to say that Maybe is arbitrary. I meant that specializing to
> Maybe makes it more inconvenient to use with other MonadPlus instances, and I
> don't see a benefit to counter that.
There is a choice here between convenience and safety. What would
Haskell choose?
> [...]
> That's not to mention potential information loss compared to fail.
which does not arise in this particular case.
> [...]
> I just think it's frustrating that we have abstractions that do exactly what
> we want, and then don't use them. :)
It's not an abstraction: it's overloading. It conflates three different
things (an element of a view, exceptions and runtime errors).
More information about the Libraries
mailing list