<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes/RSS"></atom:link>
	<image>
		<url>http://ecn.channel9.msdn.com/o9/previewImages/100/567020_100x75.jpg</url>
		<title>Channel 9 - C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<link></link>
	</image>
	<description>Welcome to another series of&amp;nbsp;C9 Lectures covering

functional programming. For this series,&amp;nbsp;Dr. Ralf L&#228;mmel has generously taken the time to produce videos for Channel 9 from his office at the University
 of Koblenz-Landau (Germany), where he is a professor of computer science. The idea here is to take the next step from Erik Meijer&#39;s fantastic introductory series on functional programming. Accordingly, Ralf&#39;s series will dive into more advanced areas of functional
 programming, again focusing on the Haskell language (the functional concepts discussed here, however, span beyond any one functional language).In this second lecture in the series, Ralf digs into Type Classes, which are type system constructs that were originally introduced to provide a form of ad hoc polymorphism (i.e., an advanced form of overloading). Type classes amount to an
 intriguing element of the Haskell language, which is, for example, evident in their ability to solve the Expression Problem (make sure you watch Ralf&#39;s first lecture on this subject). Furthermore, type classes directly relate to the interface notion of mainstream
 OO programming, adding important expressiveness to C#/Java-like interfaces.Type classes also take functional or declarative programming to a whole new level—one may define relations and functions pointwisely on types. That is, in the same way a regular function pattern matches on value structure, a type-level function sort of matches
 on type-definitional structure. This is quite a mouthful, I know.There are various extensibility scenarios in the neighborhood of the Expression Problem that are interesting to consider from a design perspective, including several also addressable with type classes, and others that aren&#39;t. Look for the riddles (there are
 indeed several riddles in this lecture); many of them call for a discussion, rather than a straight solution. But beware—some of them are really difficult.Thank you, Ralf, for another great lecture! Get the slides for this lecture.Enjoy! Learn!See 
Lecture 1 - The Expression Problem 
</description>
	<link></link>
	<language>en</language>
	<pubDate>Thu, 20 Jun 2013 12:07:43 GMT</pubDate>
	<lastBuildDate>Thu, 20 Jun 2013 12:07:43 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Currently watching and great so far...</p>
<p>&nbsp;</p>
<p>But on slide 20, </p>
<p>&nbsp;</p>
<p><pre class="brush: text">data Expr x =&gt; Neg x = Neg x</pre></p>
<p>&nbsp;</p>
<p>you don't really need the constraint in the data declaration, right? </p>
<p>&nbsp;</p>
<p>Actually, they are even <a href="http://www.haskell.org/pipermail/haskell-cafe/2004-March/005985.html">
considered to be a misfeature by some</a>. <em>(Post found via </em><a href="http://www.haskell.org/haskellwiki/Data_declaration_with_constraint"><em>this Haskell wiki page</em></a><em>)</em></p>
<p>&nbsp;</p>
<p>posted by ShinNoNoir</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177555950000000</link>
		<pubDate>Wed, 18 Aug 2010 19:13:15 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177555950000000</guid>
		<dc:creator>ShinNoNoir</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Very well spotted!</p>
<p>You are absolutely right.&nbsp;</p>
<p>The constraint is in not *needed*.</p>
<p>&nbsp;</p>
<p><span>Generally, I use them when I go from closed to open.</span></p>
<p>Because they *exactly* carry on the types of the constructor components.</p>
<p>By leaving them out, you could accidentally write more polymorphic code.</p>
<p>I would call this vacuous polymorphism and I don't like it.</p>
<p>So it is a bit more than documentation.</p>
<p>&nbsp;</p>
<p>I left this sort of constraint out for Add (slide 17) because I wanted to show simple code.</p>
<p>The Add constraints are in the source file, though <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>&nbsp;</p>
<p>So indeed, you don't need them.</p>
<p>They don't make type checking in any way easier.</p>
<p>&nbsp;</p>
<p>Yes, I know that they are debated, and people keep telling me so. <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>But I find them quite useful, and I just continue to use them<span>&nbsp;as long as it takes for either ...</span></p>
<p><span>- others to agree with me, or</span></p>
<p><span>- Haskell designers to remove the feature.</span></p>
<p>&nbsp;</p>
<p><img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>&nbsp;</p>
<p>Ralf</p>
<p>&nbsp;</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177573130000000</link>
		<pubDate>Wed, 18 Aug 2010 19:41:53 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177573130000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>I'm not too familiar with it, but how do H98's data constraints compare to <a href="http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/data-type-extensions.html#gadt-style">
GHC's GADTs</a>? The GHC docs argue that the behaviour of GADTs are more useful than H98's data constraints.</p>
<p><em>(But since I don't really have experience in this particular area of Haskell, I can't tell how strong this argument is.)</em></p>
<p>posted by ShinNoNoir</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177585980000000</link>
		<pubDate>Wed, 18 Aug 2010 20:03:18 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177585980000000</guid>
		<dc:creator>ShinNoNoir</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Ok, now we are nicely in a wormhole.</p>
<p>&nbsp;</p>
<p>Yes, H98 datatype constraints only *require* a constraint.</p>
<p>... whereas GADT constructor constraints make *available* a constraint.</p>
<p>My code suffers from those required constraints because the type-class instances need to repeat the constraints.</p>
<p>If they were made available, the code would be shorter.</p>
<p>&nbsp;</p>
<p>I would like to defer GADTs to a later point in time (if I ever get there in this series).</p>
<p>The issue with datatype constraints has been long discussed but no resolution had been done for Haskell 98/'.</p>
<p>Now with GHC's GADTs, of course, a fresh option could be explored because it is a different syntax.</p>
<p>&nbsp;</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177604460000000</link>
		<pubDate>Wed, 18 Aug 2010 20:34:06 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177604460000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Thanks Ralf, I now suffer from Type Class envy! This kind of generic programming is way beyond what I'm able to express in my current work software environments but I love to have something to look forward to, as well as having something to tinker with at
 home.</p>
<p>&nbsp;</p>
<p>I must admit that whenever I see several ways to solve one general problem I become suspicious. Is there perhaps an even more general, better way to do it.&nbsp;It reminds me of the quest for a unified theory in physics (like 11-dimensional M-theory, unifying
 5 different 10-dimensional string theories). I guess in programming we already have something like this, like the lambda calculus but are still heavily exploring generic constructs at the higher-level, in particular ensuring types come along for the journey.</p>
<p>&nbsp;</p>
<p>Charles <a href="http://channel9.msdn.com/posts/Charles/Scenes-from-Emerging-Languages-Camp-2010-Standing-Roundtable-Discussion/">
spoke</a> with Gilad Bracha who had an interesting complaint about Type Classes, saying something to the effect of that they change semantics of the language (right at the beginning of the video).</p>
<p>&nbsp;</p>
<p>This is a great series, thanks!</p>
<p>posted by exoteric</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177734480000000</link>
		<pubDate>Thu, 19 Aug 2010 00:10:48 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177734480000000</guid>
		<dc:creator>exoteric</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>I pointed Ralf at that Gilad commentary and he maintains his own position on the argument that he can share with you. <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' />
</p>
<p>&nbsp;</p>
<p>Really glad you're finding this content stimulating. We're very lucky to have someone of Ralf's knowledge and experience levels teaching us advanced topics in programming. Amazing series! Thank you, Ralf! Can't wait for lecture 3.<br /><br />C</p>
<p>posted by Charles</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177787700000000</link>
		<pubDate>Thu, 19 Aug 2010 01:39:30 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634177787700000000</guid>
		<dc:creator>Charles</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>For what it is worth I have added a coding option to <a href="http://developers.svn.sourceforge.net/viewvc/developers/repository/ralfs-channel9-lectures/code/xproblem/Haskell/gadt">
svn</a> to show the detailed impact of going from Haskell 98 to GADTs.&nbsp;So basically the new Neg datatype and the corresponding Expr instance looks like this:</p>
<p>&nbsp;</p>
<p><pre class="brush: text">data Neg x where Neg :: Expr x =&gt; x -&gt; Neg x instance Expr (Neg x) </pre></p>
<p>&nbsp;</p>
<p>It is appreciated that the Expr constraint is only needed once: in the datatype declaration, but then not again in any instance for Neg.&nbsp;</p>
<p>&nbsp;</p>
<p>I think the discussion with constraint propagation is often linked with <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.2816">
Hughes' paper on restricted datatypes</a> from 1999.&nbsp;I agree that the GADT-based behavior is more useful than regular datatype constraints.&nbsp;Certainly in our example.&nbsp;A similar behavior has been discussed for long for regular datatype constraints but no consensus
 was reached.&nbsp;Hughes' paper hints at some difficulties of constraint propagation; see Section 7.&nbsp;Anyway, it will be intriguing to see how the Haskell standard evolves.</p>
<p>&nbsp;</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634178473280000000</link>
		<pubDate>Thu, 19 Aug 2010 20:42:08 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634178473280000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p><strong>Re: &quot;but [we] are still heavily exploring generic constructs at the higher-level, in particular ensuring types come along for the journey.&quot;</strong></p>
<p>&nbsp;</p>
<p>Yes, I think this is a very useful way of putting it.</p>
<p>Don't have anything deep to add.</p>
<p>Obviously, you have seen some options doing this exploration.</p>
<p>Here are my favorite options:</p>
<p>a)&nbsp;<a href="http://research.microsoft.com/en-us/um/people/emeijer/Papers/RDL04Meijer.pdf">Static Typing Where Possible, Dynamic Typing When Needed</a></p>
<p>b) <a href="http://bracha.org/pluggableTypesPosition.pdf">Pluggable Type Systems</a></p>
<p>c) <a href="https://c2.com/cgi/wiki?DependentTyping">Dependent typing</a></p>
<p><a href="https://c2.com/cgi/wiki?DependentTyping"></a></p>
<p>...</p>
<p>&nbsp;</p>
<p>Type classes sort of allow us to fake pluggable type systems and dependent typing quite a bit.</p>
<p>&nbsp;</p>
<p>One thing that interests me personally is the integration of typing (or verification) with program evolution. That is, it is great, if we can write programs in a highly structured way to receive tons of type-system support, but once we need to evolve the
 program in unanticipated ways, then we don't want to totally fall off the safe desk. So this is the thing with the expression problem. We may be fond of heavily preparing our program for extension, but ultimately all this effort may be in vain because the
 evolution scenario is not exactly about data or operation extension. But then again, it is cool to have both forms of extensibility w/o any notational overhead, in which case, we are at least not tricked into any design exorcism. (Alas, the type-class approach
 to the expression problem does cause notational overhead.)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Re: Bracha's type-class resentment</strong></p>
<p>&nbsp;</p>
<p>Context --&nbsp;Quotes:&nbsp;</p>
<p>&nbsp;</p>
<p>&quot;Essentially you view the type system as a static analysis and you can choose [...].&quot;</p>
<p>&quot;None of these analyses actually change what the language does.&quot;</p>
<p>&quot;I have this religious point that the type system should not impact the evaluation rules&quot;.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>He says that most type systems are not like this. As an exception, he points out that the typed lambda calculus is Ok (presumably because of type erasure, which is mentioned later). He also does not like dependent typing btw, he says because of complexity.
 <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span>To me, there is not enough information to become 100% conclusive on Bracha's opinion, and to start defending type classes. If I would have been there at the roundtable discussion (without roundtable), I would have asked Bracha the following question:</span></p>
<p>&nbsp;</p>
<p>&quot;Consider a simple C# subset without overloading, perhaps even without interfaces (for simplicity). Now assume a straightforward static type system for this subset. The type system would provide us with the guarantee that any method invocation is feasible
 at runtime. Of course, there is still some minimal, shared knowledge between type system and runtime system. That is, objects at runtime would need to carry around their nominal class type (say, class id). Also, constructor invocations would need to refer
 consistently to class ids.&nbsp;<span>Those ids would be used in dispatching method calls to the appropriate implementations based on the class id of the receiver object or the static type for a constructor/static method call.
<strong>Do you have any issue with this sort of 'impact', if any, of the type system on the evaluation rules?</strong>&quot;</span></p>
<p>&nbsp;</p>
<p>I would really hope that the answer is &quot;no&quot;.&nbsp;<span>That is, AFAIK, this sort of type system should count just as a static analysis.&nbsp;</span><span>This usage of ids should not count as 'a type system impacting the evaluation rules'; it is merely about&nbsp;<em>resolution</em>:
 we connect constructor invocations and other type references to class declarations, and maintain ids or qualified type names in runtime values.</span></p>
<p>&nbsp;</p>
<p><span>In the following, I assume that Bracha is fine with the above OO type system.</span></p>
<p>(Otherwise I need to reconsider.)</p>
<p>So I would argue as follows:</p>
<p>&nbsp;</p>
<p>&quot;But hey, type classes do not fundamentally impact runtime semantics; it is merely an 'implementation detail' that type system rules and evaluation rules are connected. To see this, consider the following option. We maintain a global pool of instance declarations
 which are indexed by the datatype ids of the instance heads. Whenever we need to apply a type-class function (method), we use a parameter expression to extract the datatype id from the runtime value. (We would need to translate datatype constructors into datatype
 ids.) <strong>In this manner, we can do dispatching for type classes very much in the same way as in the earlier OO case.</strong>&quot;</p>
<p>&nbsp;</p>
<p>Now, this comparison is a bit brittle, as Bracha or myself would notice.&nbsp;<span>The extraction of a datatype id from a runtime value does not work together with laziness. Also, we are in trouble, if the type-class parameter is not used on the parameter positions
 of the member function (but only on the result position), and again, no datatype id can be extracted from any available runtime value.</span></p>
<p>&nbsp;</p>
<p>But all such issues are easily resolved by something that is established in language design and implementation:
<em>elaboration</em>. The intermediate representation would just be arranged to contain extra datatype ids that were obtained through type checking/inference; extra parameter positions would be set up to pass datatype ids at runtime where necessary.&nbsp;</p>
<p>&nbsp;</p>
<p>I don't know how the conversation would go from there.&nbsp;</p>
<p>&nbsp;</p>
<p>Until further notice, I don't think that anything is wrong with type classes <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>&nbsp;</p>
<p>Ralf</p>
<p>&nbsp;</p>
<p>PS: I like Bracha's wording when he pinpoints that a type system should not impact the evaluation rules. I don't particularly like the mentioning of 'change' here and there in the conversation---as if the type system changes what the language does or changes
 the semantics of programs. This sounds like that the program has a semantics before typing and a different one after typing. However, the standard approach to Haskell with type classes is rather that the program has no semantics without typing. So&nbsp;<span>I
 don't see where the change is.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634178536790000000</link>
		<pubDate>Thu, 19 Aug 2010 22:27:59 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634178536790000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Hi Ralf,</p>
<p>&nbsp;</p>
<p>Here is is the 64M question: assume I don't care about type safety; can I define a dynamic language that supports type classes? If yes, we can write a paper. If not, I don't want them!</p>
<p>posted by GiladB</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179087360000000</link>
		<pubDate>Fri, 20 Aug 2010 13:45:36 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179087360000000</guid>
		<dc:creator>GiladB</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Hi Gilad,</p>
<p>&nbsp;</p>
<p>it would be easy to have dynamically typed single-parameter type classes --- if we require that there is one occurrence of the type parameter among each member's argument types (read as &quot;argument position&quot; in dynamically typed speak); if we also have a non-lazy
 language. In this case, we would essentially use type classes for a kind of retroactive interface implementation mechanism.</p>
<p>&nbsp;</p>
<p>All what I am saying is that single-parameter type classes with the listed occurrence restriction for the type parameter are not particularly advanced. In an OO setup, it would just be another option for adding methods to existing classes. Clearly, dynamically
 typed languages are happy to provide such operation extensions in other ways (method wrappers, advanced reflection, change boxes, what have you).&nbsp;<span>Now, if we allow for multi-parameter type classes, we get into the neighborhood of multi dispatch (in OO
 terms), and again, dynamically typed languages have covered that ground.</span></p>
<p>&nbsp;</p>
<p>So I guess the particular contribution of type classes is that they can do it with static type safety.</p>
<p>&nbsp;</p>
<p>Writing a paper sounds cool; we probably need to push for a bit more material.</p>
<p>&nbsp;</p>
<p>Ralf</p>
<p>&nbsp;</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179140650000000</link>
		<pubDate>Fri, 20 Aug 2010 15:14:25 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179140650000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>great series so far. Really enjoying this</p>
<p>posted by Parmenio</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179473200000000</link>
		<pubDate>Sat, 21 Aug 2010 00:28:40 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179473200000000</guid>
		<dc:creator>Parmenio</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Hi,</p>
<p>really love the series so far.</p>
<p>I still hope for typeclasses in the CLR <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-5.gif' alt='Wink' /></p>
<p>posted by CbrAInK</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179782770000000</link>
		<pubDate>Sat, 21 Aug 2010 09:04:37 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634179782770000000</guid>
		<dc:creator>CbrAInK</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>So is this, like, the Haskell encoding of CLisp's <em>defmethod</em>?</p>
<p>&nbsp;</p>
<p>posted by Will48</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194473680000000</link>
		<pubDate>Tue, 07 Sep 2010 09:09:28 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194473680000000</guid>
		<dc:creator>Will48</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p>Yes, Common Lisp is way more powerful (and a tiny bit less typed) <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p>
<p>But seriously, I always argue that type classes are nothing extremely impressive for a dynamically typed programmer, certainly not for one who knows about and loves CLOS, for example.</p>
<p>Type classes in Haskell just bring some bits of similar expressiveness to a strongly typed setting.</p>
<p>posted by user42</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194534900000000</link>
		<pubDate>Tue, 07 Sep 2010 10:51:30 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194534900000000</guid>
		<dc:creator>user42</dc:creator>
	</item>
	<item>
		<title>Re: C9 Lectures: Dr. Ralf L&#228;mmel - Advanced Functional Programming - Type Classes</title>
		<description>
			<![CDATA[
<p><em>... bringing some bits of </em>[LISP]<em> expressiveness to a </em>[statically]<em> typed setting.</em></p>
<p>&nbsp;</p>
<p>That about sums it up for the last two or three decades of mainstream language development. <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' />
</p>
<p>&nbsp;</p>
<p>Yes, of course (static) types are a huge difference comparing to run-time orientation of CLisp. One thing all comparers of CLOS and OO would always point out was the multi-dispatch capability of defmethod - and yet here you've shown how to achieve that,
 even at compile-time through the type resolution of Haskell! </p>
<p>&nbsp;</p>
<p>Finding such parallels really helps to clarify concepts, and to bring dicipline even into coding under permissive languages. After all, there's nothing that can't be expressed in a bit of ASM. <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /> It's the
<em>insight</em> that we're really after in CS, I think.</p>
<p>&nbsp;</p>
<p>Thank you again for the great lectures!</p>
<p>posted by Will48</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194607270000000</link>
		<pubDate>Tue, 07 Sep 2010 12:52:07 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Ralf-Lmmel-Advanced-Functional-Programming-Type-Classes#c634194607270000000</guid>
		<dc:creator>Will48</dc:creator>
	</item>
</channel>
</rss>