
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. Thanks, Neil.