<?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;Pernicious Myth No. 1:  The Container Fiction&quot;</title>
		<link>http://syntax.wikidot.com/blog:7/comments/show</link>
		<description></description>
				<copyright></copyright>
		<lastBuildDate>Sat, 25 May 2013 22:27:22 +0000</lastBuildDate>
		
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-1251665</guid>
				<title>(no title)</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-1251665</link>
				<description></description>
				<pubDate>Tue, 06 Sep 2011 08:51:29 +0000</pubDate>
				<wikidot:authorName>Discount Sunglasses</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Write very good! Back Up.<br /> Discount Sunglasses <a href="http://www.bestsunglassesbrand.com">http://www.bestsunglassesbrand.com</a><br /> Moncler Down <a href="http://www.frbestmoncler.com">http://www.frbestmoncler.com</a><br /> Sunglasses for Glasses <a href="http://www.worstsunglassesbrand.com">http://www.worstsunglassesbrand.com</a><br /> Discount Nike Sneakers <a href="http://www.nikerwo.com">http://www.nikerwo.com</a></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-1251408</guid>
				<title>(no title)</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-1251408</link>
				<description></description>
				<pubDate>Tue, 06 Sep 2011 03:16:26 +0000</pubDate>
				<wikidot:authorName>Wholesale Nike Sneakers</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>I am so grateful to read this such a wonderful post.<br /> <a href="http://www.nikerbo.com">http://www.nikerbo.com</a><br /> <a href="http://www.jordanhut.com">http://www.jordanhut.com</a><br /> <a href="http://www.bestmonclerhut.com">http://www.bestmonclerhut.com</a></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-950802</guid>
				<title>(no title)</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-950802</link>
				<description></description>
				<pubDate>Tue, 14 Dec 2010 15:14:23 +0000</pubDate>
				<wikidot:authorName>Vlad Patryshev</wikidot:authorName>				<wikidot:authorUserId>648796</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Such a pity I did not see this before. People around the world still believe a monad hides something inside.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-401474</guid>
				<title>Re: Concrete impementation and abstract POV of pure reduction machine</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-401474</link>
				<description></description>
				<pubDate>Mon, 02 Mar 2009 14:23:36 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Hi Will,</p> <p>Thanks, this is a very useful way of putting it. I started out trying to think in purely mathematical terms and not paying any mind to implementation stuff like how things are represented, but obviously at some point one would have to leap the chasm between math and actual languages and compilers. The kind of language you use here is an excellent way to integrate these two worlds.</p> <p>Thanks,</p> <p>gregg</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-401469</guid>
				<title>Re: Container metaphor considered useful when decoupled from access</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-401469</link>
				<description></description>
				<pubDate>Mon, 02 Mar 2009 14:16:32 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Actually, I stand corrected: from a set-theoretic perspective, a function is exactly a container - a set of ordered pairs, nothing more, nothing less, and lots of people probably think of it that way. I was reminded of this when I went back to look at Z (I think you'd find it very interesting; see the links on my <a href="http://syntax.wikidot.com/resources">resources</a> page.) So what does that do to my argument, other than demolish it?</p> <p>Actually I'm not sure it does demolish it. My original motivation was thinking about the ontology of mathematical objects. ZF set theory is just another <em>representation</em> of mathematical objects. The lambda operator captures what I'm getting at better: given a formula like <span class="math-inline">$x+2$</span>, the corresponding lambda expression <span class="math-inline">$\lambda x.x+2$</span> denotes the function <em>associated with</em> the formula (Church's words, my emphasis). In other words it just gives us a way to refer to the function (mathematical object) without naming it, but it doesn't say anything about what it <em>is</em>, except that it corresponds to the formula. In Z notation, one could use set comprehension notation to refer to the same object, something like <span class="math-inline">$\{ (x,y) | y = x+2 \}$</span> (read &quot;the set of all pairs <span class="math-inline">$(x,y)$</span> satisfying the predicate <span class="math-inline">$y = x+2$</span>&quot;.) Ok, a set is about as containerish is it gets, but the point is we cannot privilege that representation by saying a function <em>is</em> a set of ordered pairs.</p> <p>In any case your post(s) are a good reminder that most programmers are going to be coming from a practical, bottom-up perspective - thinking in terms of machine and language-specific concepts - whereas I'm trying to start with the theoretical, purely mathematical stuff and work my way down to the bits. But the kind of programmers who work with LISP dialects and FP languages are probably going to think in terms of a mix of theoretical and implementational (machine, specific language) ideas, so I think the trick (if one were to try to write e.g. a guide to Haskell from the top-down perspective) is to be very clear about the theory/practice distinction and show how they match up.</p> <p>Thanks,</p> <p>gregg</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-401428</guid>
				<title>Container metaphor considered useful when decoupled from access</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-401428</link>
				<description></description>
				<pubDate>Mon, 02 Mar 2009 13:15:24 +0000</pubDate>
				<wikidot:authorName>Will</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <blockquote> <p>I think for most people it would be a stretch to think of a function as containing anything</p> </blockquote> <p>not those familiar with Scheme… :) They'd think right away in terms of function call frames holding their lexical bindings.</p> <p>Maybe a container metaphor is not such a bad idea to hold as long as we realize it's just a metaphor (<em>"denotes containment"</em> — what a great way of putting it!). If some value can be retrieved reliably, repeateably, from an "object", it's only natural to think of that value being contained by it.</p> <p>How the held value is retrived from a curried function <tt>fooa = foo a</tt> (that is what it is, right) or from list, is two different things; so the mechanics of how a function is lifted over to them are different too - since it all eventually boils down to how and by what means the access is performed. So,</p> <p><tt>liftL f (a:as) = f a : liftL f as</tt><br /> — access on list is patter-matching</p> <p><tt>liftS f fooa s = (f a, s') where (a,s') = fooa s</tt><br /> — access on fooa is by ($ s)</p> <p>But the meaning is the same. Both versions are just reductions of <tt>(liftM f = m »= (return.f))</tt>.</p> <p>So here the container metaphor looks helpful in understanding.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-401403</guid>
				<title>Decoupling of concrete (implementation) and abstract (definition)</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-401403</link>
				<description></description>
				<pubDate>Mon, 02 Mar 2009 12:28:37 +0000</pubDate>
				<wikidot:authorName>Will</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>IOW Haskell decouples abstract definitions from their implementation.</p> <p>In concrete languages, when we use "struct" we know what's going on internally. In Haskell, we don't.</p> <p>The compiler is free to choose whatever concrete representation it pleases for a given abstract construct, as long as its behaviour is as prescribed.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-401377</guid>
				<title>Concrete impementation and abstract POV of pure reduction machine</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-401377</link>
				<description></description>
				<pubDate>Mon, 02 Mar 2009 11:37:47 +0000</pubDate>
				<wikidot:authorName>Will</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Hi, liked it very much!</p> <p>If you'll allow my trying to rephrase you in more simple terms (so it is easier for me to understand), it's all about a distinction between an abstract mathematical concept and its concrete implementation inside the machine i.e. run-time system. A distinction between the inside pure world of Haskell compiler, and the outside real world of its run-time system implementation.</p> <p>We are too imperatively inclined and are used to think in terms of concrete representations. To take your example of a pair, it _can_ actually be represented - inside run-time system world - by a C struct with two fields. Or if we use Scheme, by a tagged cons chain. Or by nothing at all - if it is all "compiled out" into its basic components as e.g. C's global variables.</p> <p>And this is the main point. What it all means, is that the compiler is allowed to "compile it all out" into the thin air. What it means, is that from the mathematical perspective - from inside the pure Haskell world now - every object is an opaque entity which can only be known to us through its prescribed transactions (re: ADT via functional interfaces). IOW an object is defined by what we can do with it, ask of it, ask from it. By transactions we can get involved with it.</p> <p>And that has got nothing to do with its concrete representations chosen by the implementation. And so a list - from the pure standpoint - is not a list, but an object which can be asked LENGTH? (!!)? and participate in (:). The list image inside the run-time implementation can be anything that will give us same answers to same questions. Or it can be nothing at all, as long as we get the same answers to same questions we pose using its "name" that holds its "value". As long as there's Repeatability and Predictability exhibited by our program/run-time system/implementation.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-387327</guid>
				<title>Re:</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-387327</link>
				<description></description>
				<pubDate>Tue, 17 Feb 2009 07:28:45 +0000</pubDate>
				<wikidot:authorName>Alexey Romanov</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>I know this, but since gar says [] (not :) is the morphism and there is just one argument, I thought he had to mean something else.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-386036</guid>
				<title>Containers</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-386036</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 22:49:19 +0000</pubDate>
				<wikidot:authorName>sclv</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>The difference between a fiction and a construction is whether you understand and agree with the formalization. For containers, there are worse places to start than Ghani, Abbott and Altenkirch:<br /> <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.285">http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.3.285</a></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385850</guid>
				<title>Re: Can I have an understanding check?</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385850</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 18:37:27 +0000</pubDate>
				<wikidot:authorName>C. Smith</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>That helps.<br /> It takes several readings to climb up the intellectual ladder.<br /> Sort of feel like I'm getting there.<br /> Thanks.<br /> Chris</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385777</guid>
				<title>Re:</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385777</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 16:24:55 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Hi augustss - see my post on Intergalactic Telefunctors, I think it might answer your question.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385694</guid>
				<title>(no title)</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385694</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 13:17:54 +0000</pubDate>
				<wikidot:authorName>augustss</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Can you first explain what you think a container is? Then we might or might not be able to agree with you.<br /> To me types like [a], Maybe a, etc are containers (but not all monads are containers). But for me a container is something where I can put something in and later get it back out again. I'm sure you have some other more precise definition in mind.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385495</guid>
				<title>But...</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385495</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 04:54:27 +0000</pubDate>
				<wikidot:authorName>Dan P</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>…the internal language of a Cartesian Closed Category shows us that with care it's fine to reason about AxB in terms of elements of A and B even when our category doesn't have elements.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385466</guid>
				<title>Re: Constructivism</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385466</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 03:29:42 +0000</pubDate>
				<wikidot:authorName>Greg Buchholz</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>I think the intuitionist believes the act of creation happens in the mind of the reader. Not really related, but you might enjoy Errett Bishop's "The Crisis in Contemporary Mathematics".</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385451</guid>
				<title>Re:</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385451</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 02:58:51 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I think the CT way of looking at e.g. "[1,2,3]" is as a mapping from a set to the free monoid generated by the integers, or something like that. It's a little hairy, actually. <a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;tid=7986">Pierce</a> has a very concise treatment of how List works. A simpler example would be something like taking an int a to the pair (a,1).</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385444</guid>
				<title>Re: Constructivism</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385444</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 02:51:26 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>No, that's solipsism. ;)_ I gather Intuitionist philosophy does think mathematics is non-linguistic, non-platonic, etc. But that's philosophy, and not even the most ardent intuitionist/constructivist would argue that writing stuff down is anything other than an act of description, not creation. At least I sure hope not.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385438</guid>
				<title>Re: There&#039;s nothing wrong with calling containers containers...</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385438</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 02:47:34 +0000</pubDate>
				<wikidot:authorName>gar</wikidot:authorName>				<wikidot:authorUserId>21583</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>FWIW I'm about as far from being a professional mathematician as you can get. I'm just trying to figure out Haskell, and I've been lead astray be lots of tutorials.</p> <p>"List" is a good name, defined as you defined it: it means the constructor lists its arguments, not that the denoted value is some kind of list.</p> <p>One would not want to belabor this point too much in a manual or guide, but I think it is worth making in order to bring out the character of functors as structure-preserving things that allow us to manipulate the values of one (unknown) domain using the objects and morphisms of another (known) domain.</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385428</guid>
				<title>There&#039;s nothing wrong with calling containers containers...</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385428</link>
				<description></description>
				<pubDate>Sun, 15 Feb 2009 02:14:15 +0000</pubDate>
				<wikidot:authorName>barsoap</wikidot:authorName>				<wikidot:authorUserId>281782</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>…as long as you say that a container is a thing that denotes containment. Whether or not you describe a phenomenon using nouns, verbs, or relations does not matter: All are mere maps, not the territory itself.</p> <p>I'm constantly puzzled by professional mathematicians becoming territorial about nomenclature, usually justified by the need to "avoid misunderstanding". "List" is a very good name, it denotes that the constructor <em>lists</em> its argument. Things of course get harder with nullary functions: They do not have a chance to form a morphism, they only can be subject of one. Is this latter — let's call it "subjective" — view of values what you're driving at?</p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://syntax.wikidot.com/blog:7/comments/show#post-385350</guid>
				<title>Avoid success at all cost</title>
				<link>http://syntax.wikidot.com/blog:7/comments/show#post-385350</link>
				<description></description>
				<pubDate>Sat, 14 Feb 2009 23:48:24 +0000</pubDate>
				<wikidot:authorName>Damien Guichard</wikidot:authorName>								<content:encoded>
					<![CDATA[
						 <p>Of course you are correct.</p> <p>However i believe adopting such a radical approach would lead to elitism.<br /> May be, if you come from an algebraic culture, then the container fiction hurts your first contact with Haskell.<br /> But let's face it: if you come from an algebraic culture then certainly Haskell is easier to grasp than if you are say, a Cobol programmer.</p> <p>In my opinion, up to a certain extent, the tolerant way to speak about Haskell is to avoid difficulties for beginners and syntax-oriented people. Beginners tend to think about programming using objects, containers are familiar to them, containers are objects within objects, that's exactly what they expect to be.</p> <p>Tell them there is no object, tell them everything is defined behavioristically, tell them morphism is the real thing and you have lost them, perhaps forever. Containers may be a fiction yet there are a fiction with a purpose.<br /> I understand how CT can be deeply enlightening yet i simply don't want functionnal programming becoming an ivory tower only inhabited with people ending every word with -morphism.</p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>