<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Haskell Records Considered Grungy</title>
	<atom:link href="http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/feed/" rel="self" type="application/rss+xml" />
	<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/</link>
	<description>Programming language geek-outs with your host, Max Bolingbroke</description>
	<lastBuildDate>Wed, 22 Apr 2009 11:47:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Max Nanasy</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-737</link>
		<dc:creator>Max Nanasy</dc:creator>
		<pubDate>Sun, 18 Jan 2009 06:49:44 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-737</guid>
		<description>You still have some errors in the way you wrote your pattern matches:

&gt; name (Bird value, _) = value
should be
&gt; name (Bird value _) = value

Commas are only for record syntax and some syntactically unique constructors, such as lists and tuples.</description>
		<content:encoded><![CDATA[<p>You still have some errors in the way you wrote your pattern matches:</p>
<p>&gt; name (Bird value, _) = value<br />
should be<br />
&gt; name (Bird value _) = value</p>
<p>Commas are only for record syntax and some syntactically unique constructors, such as lists and tuples.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jimmy H</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-734</link>
		<dc:creator>Jimmy H</dc:creator>
		<pubDate>Sun, 30 Nov 2008 19:14:08 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-734</guid>
		<description>I find it ironic that you complain about record extraction being prefix rather than postfix, and then later complain that record update isn&#039;t available in point-free form, and indicate that if Haskell were saner, it would also be prefix...

The &quot;functional orthogonality&quot; of Haskell that you mention is its best feature in my book. updateWings = {wings = 3} is just changing the semantics of record update to something in line with the rest of the language.

For the people who want &quot;update field container value = ...&quot;, what should its type be?</description>
		<content:encoded><![CDATA[<p>I find it ironic that you complain about record extraction being prefix rather than postfix, and then later complain that record update isn&#8217;t available in point-free form, and indicate that if Haskell were saner, it would also be prefix&#8230;</p>
<p>The &#8220;functional orthogonality&#8221; of Haskell that you mention is its best feature in my book. updateWings = {wings = 3} is just changing the semantics of record update to something in line with the rest of the language.</p>
<p>For the people who want &#8220;update field container value = &#8230;&#8221;, what should its type be?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Idetrorce</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-702</link>
		<dc:creator>Idetrorce</dc:creator>
		<pubDate>Sun, 16 Dec 2007 06:27:24 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-702</guid>
		<description>very interesting, but I don&#039;t agree with you 
Idetrorce</description>
		<content:encoded><![CDATA[<p>very interesting, but I don&#8217;t agree with you<br />
Idetrorce</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: josh</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-17</link>
		<dc:creator>josh</dc:creator>
		<pubDate>Fri, 27 Apr 2007 18:43:40 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-17</guid>
		<description>I think the { wings = x } issue would be less of a problem if you could write &quot;update field container value = container { field = value }&quot;.  But of course you can&#039;t.</description>
		<content:encoded><![CDATA[<p>I think the { wings = x } issue would be less of a problem if you could write &#8220;update field container value = container { field = value }&#8221;.  But of course you can&#8217;t.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: batterseapower</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-8</link>
		<dc:creator>batterseapower</dc:creator>
		<pubDate>Fri, 27 Apr 2007 13:05:15 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-8</guid>
		<description>Saizan, thanks for your comment! You are indeed right that my pattern matches were totally off, I&#039;ve fixed that (maybe it&#039;ll teach me to make posts without a compiler available!).

However, my point about changeWings stands: what I&#039;m trying to say is that { wings = x } is not actually a function, it&#039;s something a bit special that has meaning only when a record value is put before it. It&#039;s ugly because it breaks the nice functional orthogonality of other Haskell constructions. I probably should have made this clearer!</description>
		<content:encoded><![CDATA[<p>Saizan, thanks for your comment! You are indeed right that my pattern matches were totally off, I&#8217;ve fixed that (maybe it&#8217;ll teach me to make posts without a compiler available!).</p>
<p>However, my point about changeWings stands: what I&#8217;m trying to say is that { wings = x } is not actually a function, it&#8217;s something a bit special that has meaning only when a record value is put before it. It&#8217;s ugly because it breaks the nice functional orthogonality of other Haskell constructions. I probably should have made this clearer!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Saizan</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-7</link>
		<dc:creator>Saizan</dc:creator>
		<pubDate>Fri, 27 Apr 2007 12:48:57 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-7</guid>
		<description>your desugaring examples are quite wrong:
&gt; name :: Bird -&gt; String
&gt; name (value, _) = value  
should be written:
&gt; name (Bird value _) = value

Also you can indeed write a changeWings function:
&gt; changeWings :: Integer -&gt; Bird -&gt; Bird
&gt; changeWings x b = b{wings = x }

the problem is that you can&#039;t write something like this:
&gt; changeField field v b = b{field = v}</description>
		<content:encoded><![CDATA[<p>your desugaring examples are quite wrong:<br />
&gt; name :: Bird -&gt; String<br />
&gt; name (value, _) = value<br />
should be written:<br />
&gt; name (Bird value _) = value</p>
<p>Also you can indeed write a changeWings function:<br />
&gt; changeWings :: Integer -&gt; Bird -&gt; Bird<br />
&gt; changeWings x b = b{wings = x }</p>
<p>the problem is that you can&#8217;t write something like this:<br />
&gt; changeField field v b = b{field = v}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: batterseapower</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-6</link>
		<dc:creator>batterseapower</dc:creator>
		<pubDate>Fri, 27 Apr 2007 12:45:54 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-6</guid>
		<description>Thanks a lot for all the great comments! I&#039;ll be sure to check out those two papers. And yeah, the module system is one (considerably cleaner, it must be said!) way to get around the namespace problem, but it&#039;s still not perfect :). Heres hoping Haskell&#039; solves all this for us!</description>
		<content:encoded><![CDATA[<p>Thanks a lot for all the great comments! I&#8217;ll be sure to check out those two papers. And yeah, the module system is one (considerably cleaner, it must be said!) way to get around the namespace problem, but it&#8217;s still not perfect <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Heres hoping Haskell&#8217; solves all this for us!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Logan Capaldo</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-5</link>
		<dc:creator>Logan Capaldo</dc:creator>
		<pubDate>Fri, 27 Apr 2007 11:57:10 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-5</guid>
		<description>An alternative hack (which I&#039;m sure you are aware of) would be something like:

module Bird where
data Bird = Bird { name :: String, wings :: Integer }

...

module Person where
data Person = Person { name :: String, age :: Integer }

...

module Main where
import qualified Bird
import qualified Person -- heh
...
&gt; Person.name examplePerson
...
&gt; Bird.name exampleBird
...

To make it a little less wordy:
import qualified Bird as B
...
&gt; B.name exampleBird</description>
		<content:encoded><![CDATA[<p>An alternative hack (which I&#8217;m sure you are aware of) would be something like:</p>
<p>module Bird where<br />
data Bird = Bird { name :: String, wings :: Integer }</p>
<p>&#8230;</p>
<p>module Person where<br />
data Person = Person { name :: String, age :: Integer }</p>
<p>&#8230;</p>
<p>module Main where<br />
import qualified Bird<br />
import qualified Person &#8212; heh<br />
&#8230;<br />
&gt; Person.name examplePerson<br />
&#8230;<br />
&gt; Bird.name exampleBird<br />
&#8230;</p>
<p>To make it a little less wordy:<br />
import qualified Bird as B<br />
&#8230;<br />
&gt; B.name exampleBird</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Neil Mitchell</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-4</link>
		<dc:creator>Neil Mitchell</dc:creator>
		<pubDate>Fri, 27 Apr 2007 10:30:14 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-4</guid>
		<description>Daan Leijen, &quot;Extensible records with scoped labels&quot; - http://www.cs.ioc.ee/tfp-icfp-gpce05/tfp-proc/21num.pdf

That paper may be of interest to you, its a very different, and very neat way of defining records.</description>
		<content:encoded><![CDATA[<p>Daan Leijen, &#8220;Extensible records with scoped labels&#8221; &#8211; <a href="http://www.cs.ioc.ee/tfp-icfp-gpce05/tfp-proc/21num.pdf" rel="nofollow">http://www.cs.ioc.ee/tfp-icfp-gpce05/tfp-proc/21num.pdf</a></p>
<p>That paper may be of interest to you, its a very different, and very neat way of defining records.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Josef Svenningsson</title>
		<link>http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-3</link>
		<dc:creator>Josef Svenningsson</dc:creator>
		<pubDate>Fri, 27 Apr 2007 09:52:56 +0000</pubDate>
		<guid isPermaLink="false">http://bloggablea.wordpress.com/2007/04/24/haskell-records-considered-grungy/#comment-3</guid>
		<description>I agree with you that Haskell&#039;s record system is not the strongest part of the language. It&#039;s a hack that was added because it was easy to do so and gave a way to refer to components of a constructor by name instead of by position. So the power to weight ratio is pretty high but it still is something of a wart.

The best proposals for records that I have ever seen is that by Daan Leijen. &quot;Extensible records with scoped labels&quot;(http://www.cs.uu.nl/~daan/download/papers/scopedlabels.pdf) I wish some Haskell implementation would implement that so that one could play with it. It would also be very nice to have in Haskell&#039; but that may be too much to hope for.</description>
		<content:encoded><![CDATA[<p>I agree with you that Haskell&#8217;s record system is not the strongest part of the language. It&#8217;s a hack that was added because it was easy to do so and gave a way to refer to components of a constructor by name instead of by position. So the power to weight ratio is pretty high but it still is something of a wart.</p>
<p>The best proposals for records that I have ever seen is that by Daan Leijen. &#8220;Extensible records with scoped labels&#8221;(http://www.cs.uu.nl/~daan/download/papers/scopedlabels.pdf) I wish some Haskell implementation would implement that so that one could play with it. It would also be very nice to have in Haskell&#8217; but that may be too much to hope for.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
