<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>Comments for page &quot;Moggi :: CT -&gt; Hask&quot;</title>
		<link>http://syntax.wikidot.com/blog:1/comments/show</link>
		<description></description>
				<copyright></copyright>
		<lastBuildDate></lastBuildDate>
		
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-439115</guid>
				<title>moggi&#039;s lessons</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-439115</link>
				<description></description>
				<pubDate>Fri, 03 Apr 2009 20:36:17 +0000</pubDate>
				<wikidot:authorName>fabrizio</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>during my whole academic and working career, there has been only one topic i could not understand, and it was CT. Moggi's approach during the lessons was uncompromising, no examples, just pure theory. It 's also been one of the few times where i felt the presence of a genius, his mind could entangle all the mathematical mess really easily…</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-380761</guid>
				<title>Monads as decorators</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-380761</link>
				<description></description>
				<pubDate>Tue, 10 Feb 2009 04:46:37 +0000</pubDate>
				<wikidot:authorName>egallego</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Another view to see monads is like they "decorate" function composition. It is, if you have f: a -&gt; b, g: b -&gt; c and their composition g. f in the original category, now you have the "decorated" composition g * f, which carries along a "hidden" structure m. * is defined in terms of join: m (m a) -&gt; m a</p> <p>How is join defined is not specified, but it has to respect monad laws.</p> <p>Haskell is not a point-free language, so you cannot transparently overload the . operator and so work in arbitrary Kleisli categories, you must use bind. (The alternative would be to overload function application!)</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-380377</guid>
				<title>Terrific!</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-380377</link>
				<description></description>
				<pubDate>Mon, 09 Feb 2009 20:28:52 +0000</pubDate>
				<wikidot:authorName>Simon</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>I found this overview very readable and useful, thanks!</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-379806</guid>
				<title>Re: Extremely misleading or simply factually wrong</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-379806</link>
				<description></description>
				<pubDate>Mon, 09 Feb 2009 09:41:48 +0000</pubDate>
				<wikidot:authorName>Kefer</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Derek,</p> <p>The OP responded as such probably because of your (by layperson standards, provocative) title.</p> <p>But thank you for providing context to the discussion. Having understood a bit more of Moggi's work, I really appreciate it.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-379502</guid>
				<title>Re: Extremely misleading or simply factually wrong</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-379502</link>
				<description></description>
				<pubDate>Mon, 09 Feb 2009 00:15:08 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Hi Derek,</p> <p>I'm afraid I'll have to disagree with your assertion that (to paraphrase) monads are a mere stylistic device. Far from it: using category theory to provide semantics is every bit as radical as using category theory instead of set theory to account for mathematical objects. And that is very radical indeed.</p> <p>You state that Moggi was not addressing the problem of how to "represent side effects in denotational semantics". I suggest you read his papers. He explicitly lists denotational semantics as one of the approaches whose failures he attempts to remedy. Read the papers. Alas, I don't have the mathematical chops to make judgements about this sort of thing, but I've done enough research to understand that Moggi was after something far more deep than mere "organize and modularize these representations", as you put it. Again, read his papers; his goal was to produce a lambda of calculations. He was quite explicit that he was addressing exactly those issues that you claim he was not addressing!</p> <p>It's not a question of whether monads are uniquely suitable to represent IO etc.; I doubt any of the experts would endorse such an opinion.</p> <p>I frankly don't understand where you get the idea of "sweeping semantics under the rug"; Moggi's entire point was to provide good semantics, using Category Theory. Presumably you mean that eliminating objects is a Bad Idea. All I can say is, read the literature. Category theory is quite explicit: objects don't matter. That's the genius of it, and if it seems a "mockery", maybe you should think a little harder.</p> <p>-g</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-379496</guid>
				<title>Re: need some more explanation...</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-379496</link>
				<description></description>
				<pubDate>Sun, 08 Feb 2009 23:55:11 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Hi Daryoush,</p> <p>Ok, so the idea is that you have a text, which is pure syntax (and lexicon, I suppose), and you provide semantics by mapping the constituent elements of the syntax to elements of some semantic domain. The fundamental presupposition for mathematical notation is "referential transparency", which is a very direct metaphor: when you look at a symbol like '2' (I mean literally the arrangement of black ink against white background), you know (because of social convention) that it is intended to "denote" (=mean) the integer "two": metaphorically, the symbol is transparent, so you can see through it to discern it's "meaning". Now if you add terms that do not have this clear interpretation (e.g "print", "read", etc.), you break the semantic integrity of the text. You (the human reader) can no longer reason about it, because you don't know what e.g. "getChar" means. Well, ok, you know it means "get a char from the user", but you don't know its denotation - the meaning of "meaning" tends to get lost in all the abstarction. You may know "getChar" denotes a character, but you don't know which one. This is true of any term/expression whose denotation cannot be determined by (human) inspection of the text. So the inclusion of any such term subverts the meaning of the text. Or at least destabilizes it.</p> <p>So by "disruption of the semantic integrity of the text", I mean the compromising of referential integrity. Any ink-on-paper mathematical text has referential integrity; "getChar" would be preposterous in a mathematical proof. But in a program text, you can have such expressions, and their presence entails the disruption of the semantic integrity you would have in an ink-on-paper mathematical text.</p> <p>Until I find a better term, I will call such terms "referentially opaque", since the reader cannot "see through" them to look at their meaning. In practice, this means non-deterministic terms, like "random", "getChar", "putChar", etc. You may think the last is deterministic, but in fact it is merely reliable. Any random gamma ray can introduce error into the output of a program, so you may say "putChar 'x'", but you cannot guarantee that the output will in fact be 'x', since it goes through a RealWorld mechanism, which is unreliable by definition.</p> <p>In sum, terms that are not referentially transparent compromise the integrity (reliabilty) of the program text, and "class of opaque terms" is just a way of thinking about all such terms as a class.</p> <p>Hope that helps,</p> <p>-gregg</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-379479</guid>
				<title>Extremely misleading or simply factually wrong</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-379479</link>
				<description></description>
				<pubDate>Sun, 08 Feb 2009 23:18:46 +0000</pubDate>
				<wikidot:authorName>Derek Elkins</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>As far as I can tell your definition of "opaque term" is a term without a denotation or the seemingly nonsensical "having a denotation when the program is executed." However, the context Moggi was working in was denotational semantics and his papers on monads were published in the late '80s. Denotational semantics started in the '60s and was certainly applied to languages with side-effects long before the '80s. My point being that things like mutable state, non-determinism, etc. already had known denotations. That very list of "notions of computation" includes a denotation for each one. The problem Moggi was addressing was not how to represent side-effects in denotational semantics — that problem had been solved immediately and indeed was part of the purpose of creating denotational semantics in the first place — the problem Moggi was addressing was how to organize and modularize these representations. For example, to represent mutable state you can use state-passing style, to represent control effects you can use continuation passing style, to represent exceptions you can use an error propagation style. Moggi unified all these "styles" into one, monadic style. Here, just like in Haskell, monads don't let you do anything that couldn't have already been done without them. They aren't magic. The benefit of monadic style is that it allowed one to capture similarities, to formulate general principles that would apply to all "notions of computation," and to be able to talk about combining effects generically.</p> <p>There is no sweeping the semantics under the rug. In particular, if the last sentence of your post was true it would make a mockery of the entire field of denotational semantics and of Moggi's contributions in particular. Luckily, that sentence and others like it have no relation to reality. The entire purpose of denotational semantics is to explain such things not to hide them away.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:1/comments/show#post-379398</guid>
				<title>need some more explanation...</title>
				<link>http://syntax.wikidot.com/blog:1/comments/show#post-379398</link>
				<description></description>
				<pubDate>Sun, 08 Feb 2009 21:08:32 +0000</pubDate>
				<wikidot:authorName>daryoush</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Can you please explain the "disruption of the semantic integrity of a program text" and "class of opaque terms" in the following paragraph.</p> <p>He gives the following examples of "notion of computation": partiality, non-determinism, side-effects, exceptions, continuations, and interactive input/output. What these "notions" have in common is disruption of the semantic integrity of a program text. They violate the principle of referential transparency, rendering the text literally uninterpretable to the human reader. So "notions of computation" effectively means the class of opaque terms in programming languages.</p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>