The IO instance of MonadPlus is essentially based on being able to throw
and catch errors inside IO.  The definition (in Monad.Error) is:

instance MonadPlus IO where
        mzero       = ioError (userError "mzero")
        m `mplus` n = m `catch` \_ -> n


so essentially the zero value is an error value and (m1 + m2) is the
action which attempts to run m1 and then, if it fails, runs m2.

HTH

 - Hal

--
Hal Daume III

 "Computer science is no more about computers    | [EMAIL PROTECTED]
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume

On Wed, 22 Jan 2003, Dean Herington wrote:

> According to the Haddock documentation for Control.Monad at
> http://www.haskell.org/ghc/, `IO` is an instance of `MonadPlus`.
> 
> 1. Where in documentation is this instance described?
> 2. Where in source code is this instance implemented?
> 3. Could links to the answers to 1 and 2 be added to the Haddock
> documentation for Control.Monad?
> 
> Obviously, these questions apply more generally than just to `MonadPlus
> IO`.
> 
> Dean
> 
> _______________________________________________
> Glasgow-haskell-users mailing list
> [EMAIL PROTECTED]
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> 

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to