[Haskell-cafe] instance Monad (Except err)
nccb2 at kent.ac.uk
Mon May 4 05:37:50 EDT 2009
Martijn van Steenbergen wrote:
> 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