#4159: move Monad and MonadFix instances for Either from mtl
to base
Isaac Dupree
ml at isaac.cedarswampstudios.org
Fri Jul 2 12:25:33 EDT 2010
On 07/02/10 08:13, John Lato wrote:
>> From: Ross Paterson<ross at soi.city.ac.uk>
>> The general question of fail is a side issue -- the question here is
>> just whether the Monad instance for Either should define fail, and if
>> so to what.
>
> I think it should not define fail (or define it to error). I've never
> been happy with the semantics of this instance. I thought the point
> of Either was that neither value had any special meaning attached to
> it, and in particular that "Left" and "Right" were chosen as being
> free of any connotations of correct, incorrect, or other. Defining
> fail as "Left x" seems wrong because it codifies the left value as an
> error. In my opinion those semantics belong to another type.
It's not quite as simple as that -- as soon as we start making Either an
instance of kind (* -> *) classes, such as Functor and Monad, there
inevitably becomes some kind of semantic difference between Left and Right.
Still, I support Ross's proposal of fail=error .
Either's 'fail' could just as type-correctly be defined 'fail s = Right
(error s)', even though no one would be happy about that... which makes
me suspicious of defining it as 'fail s = Left (error s)' too.
-Isaac
More information about the Libraries
mailing list