20 Dec 23:26
Re: instance Monad Either?
Tillmann Rendel <rendel <at> rbg.informatik.tu-darmstadt.de>
2007-12-20 22:26:37 GMT
2007-12-20 22:26:37 GMT
Eric wrote: > According to this > <http://www.randomhacks.net/articles/2007/03/10/haskell-8-ways-to-report-errors> > Either is an instance of class Monad, but when I try to use the do > notation I get a compiler error. What's going on? Try to import Control.Monad.Error to get a Monad instance for Either. Actually, the instance is for (Error a => Either a), So it's more like the 5. aproach on that page. But since there is an instance Error String you can use (Either String) as a Monad (or a MonadError): import Control.Monad.Error test1 :: Either String Int test1 = do [x, y, z] <- return [3] return 42 test2 :: MonadError e m => m Int test2 = do [x, y, z] <- return [3] return 42 *Main> test Left "Pattern match failure in do expression at test.hs:5:2-10" *Main> test2 :: Either String Int Left "Pattern match failure in do expression at test.hs:11:2-10" *Main> test2 :: IO Int *** Exception: user error (Pattern match failure in do expression at test.hs:11:2-10) Tillmann
RSS Feed