[Haskell-cafe] Monad explanation

David Menendez dave at zednenem.com
Mon Feb 9 12:41:38 EST 2009


2009/2/9 Gregg Reynolds <dev at mobileink.com>:
>
> 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.
>
> "The IO Char indicates that getChar, when invoked, performs some action
> which returns a character." (Gentle Intro, typical of many expositions.)

In this case, I think "invoked" is shorthand for "interpreted by the
runtime system".

> That, plus the form of \x -> putChar x used with >>=, plus the fact that one
> can do getChar at the ghci command line, plus all the other stuff - it all
> adds up to exasperation.

It's worth noting that ghci, unlike Haskell itself, *does* treat IO
specially. It checks the type of the expression you've entered, and
behaves differently depending on whether it's equal to a, IO a, or IO
().

interp[ e :: IO () ] = e
interp[ e :: IO a ] = e >>= print
interp[ e :: a ] = print e

This is convenient for users, but it has nothing to do with the
semantics of Haskell.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list