[Haskell-cafe] Monad explanation
dev at mobileink.com
Mon Feb 9 06:24:15 EST 2009
On Mon, Feb 9, 2009 at 4:38 AM, Tony Morris <tmorris at tmorris.net> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> I also agree it is a value.
> The original post was attempting to make a distinction that does not
> exist. I deliberately avoided that topic.
> "A thing cannot be both a value and a function, but e,g, getChar"
> My original intent was to hope the poster reconsidered the whole post.
> You've blown my cover :)
My bad, I restate: a value cannot be both static and dynamic. Or an object
and a morphism. Or an element and a function. Sure, you can treat a
morphism as an object, but only by moving to a higher (or different) level
of abstraction. That doesn't erase the difference between object and
morphism. If you do erase that difference you end up with mush. getChar
/looks/ like an object, but semantically it must be a morphism. But it
can't be a function, since it is non-deterministic. So actually the
logical contradiction comes from the nature of the beast.
Another reason it's confusing to newcomers: it's typed as "IO Char", which
looks like a type constructor. One would expect getChar to yield a value of
type IO Char, no? But it delivers a Char instead. This is way confusing.
So I take "type IO foo" to mean "type foo, after a side effect". In a sense
"getChar :: IO Char" isn't even a true type signature.
In any case, many thanks to all who have contributed to the thread. It's
sharpened my thinking revealed weaknesses in my terminology, and I expect
I'll make my inevitable contribution to the infinite Haskell tutorial on the
topic before too long.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe