
On Tue, 29 Jun 2010, Edward Kmett wrote:
A reasonable case can be made for the existence of a monad that does something useful with fail. I don't think that that monad should be Either.
'Either' takes on the connotation of being the 'sum type' for the category of Haskell types. This sum type has a very well formed and simple monad, that has a lot of useful theoretical properties, and is useful in a strictly larger array of scenarios than the monad with the error constraint, with the one notable exception that it doesn't handle the 'fail' property that was bolted into Monad in Haskell 98.
The obvious name for such a monad would be Error, to go with ErrorT, but the Error class conflicts with that name, but perhaps:
data Fail e a = Error e | OK a
would be worth adding to Control.Monad.Error, during the same general timetable as this change, to provide users who really want the existing mtl Either semantics an upgrade path.
In the interest of not killing this proposal with bikeshedding concerns over what to call it (Fail, Err, Error, etc), we should probably put that forward as a completely separate libraries proposal though.
It would address the confusion caused to new users who often on #haskell ask why 'Left' is the error case, and would address your use case explicitly, and even less verbosely. ;)
+1