[Haskell-cafe] instance Monad (Except err)

Neil Brown nccb2 at kent.ac.uk
Mon May 4 05:37:50 EDT 2009

Martijn van Steenbergen wrote:
> Hello,
> Mr. McBride and mr. Paterson define in their Applicative paper:
>> data Except e a = OK a | Failed e
>> instance Monoid e => Applicative (Except e) where ...
> Sometimes I'd still like to use >>= on Excepts but this "feels" wrong 
> somehow, because it doesn't use monoids nicely like the Applicative 
> instance does. Are there any good reasons such a Monad instance 
> shouldn't be defined? Does it violate any laws, for example?
Isn't the Except type just Either by another name?  OK = Right, Failed = 
Left.  Therefore the monad is just the same as the Either monad, and is 
useful as an error monad:

instance Monad (Except e) where
  (OK x) >>= f = f x
  Failed e >>= _ = Failed e
  return = OK

This obeys all the monad laws.



More information about the Haskell-Cafe mailing list