
+1 for this Applicative instance.
I assume that when this instance is added to Control.Applicative, the
one in Control.Monad.Trans.Error from transformers will be removed.
On Tue, May 25, 2010 at 6:22 PM, Yitzchak Gale
-1 for the orphan Monad instance with the silly superclass constraint that this Applicative instance is meant to extend
I assume you are referring to: instance (Error e) => Monad (Either e) where return = Right Left l >>= _ = Left l Right r >>= k = k r fail msg = Left (strMsg msg) defined in Control.Monad.Trans.Error from transformers or Control.Monad.Error from mtl. Thinking out loudly: since the 'fail' method is considered to be a mistake, what about not defining it? As in: instance Monad (Either e) where return = Right Left l >>= _ = Left l Right r >>= k = k r Regards, Bas