[Haskell-cafe] Monad explanation

Tillmann Rendel rendel at cs.au.dk
Mon Feb 9 12:45:31 EST 2009

Hi Gregg,

Gregg Reynolds wrote:
> Right; "implementation of IO" means also an implementation for >>=, not just
> the IO operators.  I hadn't thought about that but it's hugely important for
> the exposition of monads and IO.

Indeed, that's very important.

Note that the topics "monads in Haskell" and "IO in Haskell" can (and in 
my opinion should) be understood independently of each other.

IO in Haskell is just an abstract data type, with a bunch of functions

   return :: a -> IO a
   bind :: IO a -> (a -> IO b) -> IO b
   getChar :: IO Char
   putChar :: a -> IO ()

A Haskell runtime system is a somewhat vaguely specified interpreter for 
(IO a) values. While it would be nice to a have a better specification 
of that interpreter, it is not part of the semantics of the language 

> "The IO Char indicates that getChar, when invoked, performs some action
> which returns a character." (Gentle Intro, typical of many expositions.)

I guess that "invoked" here means really "interpreted by your Haskell 
implementation during its interpretation of the (IO a) your main 
function constructed".


More information about the Haskell-Cafe mailing list