<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rick Minerich's Development Wonderland : F#, C#, roundup</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/C_2300_/roundup/default.aspx</link><description>Tags: F#, C#, roundup</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>F# Discoveries This Week 11/22/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx</link><pubDate>Sun, 22 Nov 2009 23:49:52 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19754</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19754.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19754</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19754</wfw:comment><description>&lt;p&gt;Over this past week at PDC I was lucky enough to see some fantastic sessions and spend time with members of the F# and greater Visual Studio language teams.&amp;#160; Naturally, these experiences have left me both floored and swimming in new ideas.&amp;#160; This edition of Discoveries This Week includes both the very best of what I saw at PDC 2009 and the most outstanding things I’ve glimpsed going on in the F# community.&amp;#160; Please do enjoy.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Reflection on the PDC Keynotes&lt;/h3&gt;  &lt;p&gt;For the most information in the shortest amount of time I suggest watching the &lt;a href="http://microsoftpdc.com/Sessions/KEY01"&gt;day one&lt;/a&gt; and &lt;a href="http://microsoftpdc.com/Sessions/KEY02"&gt;day two&lt;/a&gt; PDC keynotes.&amp;#160; They are both jam packed with exciting announcements and demos.&amp;#160; While at PDC I wrote about my experience watching these &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/17/surprises-in-the-pdc09-keynote-open-source-open-platforms-and-the-democratization-of-data.aspx"&gt;here&lt;/a&gt; (day one) and &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/18/pdc09-keynote-day-2-silverlight-4-0-and-free-laptops.aspx"&gt;here&lt;/a&gt; (day two).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://microsoftpdc.com/Sessions/FT52"&gt;Microsoft Perspectives on the Future of Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Come hear from several of the Microsoft senior technical leaders about the future of programming, programming languages, and tools.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you watch just one PDC session let this be it.&amp;#160; &lt;/p&gt;  &lt;p&gt;With Butler Lampson, Erik Meijer, Don Box, Jeffrey Snover, Herb Sutter, and Burton Smith, Microsoft’s best gathered to debate the future of programming in a twitter driven panel at PDC.&amp;#160; I was happy to be able to contribute with a question on type systems which erupted into quite a disagreement.&amp;#160; I will be writing about this session at length, and reflecting on my &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/10/15/anders-hejlsberg-on-the-future-of-programming-languages.aspx"&gt;past thoughts about this topic&lt;/a&gt;, in the near future.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Luke Hoban’s &lt;a href="http://microsoftpdc.com/Sessions/FT20"&gt;F# for Parallel and Asynchronous Programming&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F#, a functional and object-oriented language for Microsoft .NET, adds many tools to make parallel and asynchronous programming both fun and easy. Come hear the core concepts of the F# language, and see how ideas like immutability, functional design, async workflows, agents, and more can be used to meet the challenges of today’s real-world applications.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;By combining small, easily understood, ideas Luke constructs F#’s big picture in the most engaging way I’ve seen to date.&amp;#160; This is now my go to talk for people who are interested in, but new to, the F# programming language.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Jomo Fisher’s &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2009/11/17/f-scripting-net-4-0-and-mixed-mode-assemblies.aspx"&gt;F# Scripting, .NET 4.0 and Mixed-mode assemblies&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the recent problems we’ve seen is that, because of the support for side-by-side runtimes, .NET 4.0 has changed the way that it binds to older mixed-mode assemblies. These assemblies are, for example, those that are compiled from C++\CLI. Currently available DirectX assemblies are mixed mode.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This clever approach to switching the F# REPL to 2.0 binding mode is particularly handy to know.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Matthew Moloney’s &lt;a href="http://www.mattssoftwareblog.com/?p=212"&gt;Collaborative Development Using F# Interactive&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;This is a proof of concept of an interactive collaborative development environment I built using&amp;#160; F# Interactive. The aim here is to explore different ideas for further development, not so much as to present an alternative to Visual Studio.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I couldn’t pass this very cool idea up.&amp;#160; I can’t help but think about extending this to full feldged explorative programming community websites.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Bart Czernicki’s &lt;a href="http://silverlighthack.com/post/2009/11/04/Silverlight-3-and-FSharp-Support-in-Visual-Studio-2010.aspx"&gt;Silverlight 3 and F# Support in Visual Studio 2010&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The goal of this blog post is to make you aware of F# support in Silverlight in Visual Studio 2010.&amp;#160; In addition, this blog post shows an example why F# is going to be very important for Silverlight architects and developers.&amp;#160; Note:&amp;#160; This is NOT an intro to F#.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A great post.&amp;#160; I am always interested in seeing concrete examples of F# adding value to existing technologies and platforms.&amp;#160; I have a sneaking suspicion that there are very few places where it won’t.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f22%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/22/discoveries-this-week-11-22-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19754" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET+4.0/default.aspx">.NET 4.0</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/silverlight/default.aspx">silverlight</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/PDC09/default.aspx">PDC09</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/pdc/default.aspx">pdc</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/REPL/default.aspx">REPL</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Silverlight+3.0/default.aspx">Silverlight 3.0</category></item><item><title>F# Discoveries This Week 11/02/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx</link><pubDate>Mon, 02 Nov 2009 15:05:22 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19634</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19634.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19634</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19634</wfw:comment><description>&lt;p&gt;F# events are popping up all over the place and so I’ve included a separate section for them today.&amp;#160; As far as posts go I’ve stumbled across immutable queue and range libraries,&amp;#160; a post on the underlying implementation of discriminated unions, using the reactive framework and finally, a Microsoft research project: F7 Refinement Types.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;-- Events --&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://www.nevb.com/"&gt;Talbott Crowell is Presenting at the New England Visual Basic Professionals, November 5th&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Introducing F#&lt;/strong&gt; at 6:15pm &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://fwcodecamp2009.eventbrite.com/?ref=eivte&amp;amp;invite=MjI0NzU2L1JpY2suTWluZXJpY2hAYXRhbGFzb2Z0LmNvbS8w%0A&amp;amp;utm_source=eb_email&amp;amp;utm_medium=email&amp;amp;utm_campaign=invite"&gt;I am Presenting at Fairfield / Westchester Code Camp 2009 on November 7th&lt;/a&gt;&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Why F#&lt;/strong&gt;&lt;/em&gt; at 11:15am in Track 2 &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;em&gt;F# for Testing and Analysis&lt;/em&gt;&lt;/strong&gt; at 2:40pm in Track 4 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.nashdotnet.org/archive/2009/10/28/37.aspx"&gt;NashDotNet - F# Firestarter in Franklin, TN on November 14th&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Come with an open mind and a laptop. Be prepared to learn, share, and chat. No prior knowledge or experience with F# is expected.&lt;/em&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1 align="center"&gt;-- Posts --&lt;/h1&gt;  &lt;h3&gt;&lt;a href="http://lepensemoi.free.fr/index.php/2009/11/02/an-immutable-range-library-in-f"&gt;Julien’s An Immutable Range Library in F#&lt;/a&gt;&amp;#160;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;An immutable range library in F# where a range is only defined by a minimum and a maximum value (hence, there is no step).&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;and &lt;a href="http://lepensemoi.free.fr/index.php/2009/10/27/an-immutable-queue-library-in-f"&gt;Julien’s An immutable Queue Library in F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;An immutable queue library in F#. The queue is divided into two lists : one for dequeueing, and one for enqueueing. All operations are based on the List module.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I hope that Julien considers contributing these gems to the F# Power Pack.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://research.microsoft.com/en-us/downloads/c0c4ed53-cfd8-4b9c-b780-74946bd1337e/default.aspx"&gt;F7: Refinement Types for F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;F7 is an enhanced type checker for the F# programming language. F7 supports static checking of properties expressed with refinement types. Our motivation is to check various security properties of F# implementation code by typing.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I took a peek at the included samples and found myself quite lost.&amp;#160; It would be great if a walkthrough on how to use F7 were to pop up.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://blogs.msdn.com/jaredpar/default.aspx"&gt;Using F# Discriminated Unions in C# (VS2010 Beta 2)&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;While updating my VsVim editor extensions for Beta2 [1] I got hit by a change in the way F# exposed discriminated unions in metadata.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;A quick romp through how discriminated unions work under the hood and how you use them from C#.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.navision-blog.de/2009/10/20/iobservableiobserver-using-the-reactive-framework-with-f/"&gt;IObservable/IObserver – Using the Reactive Framework with F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;One of the nice new features in .NET 4.0 beta 2 is the IObservable&amp;lt;T&amp;gt;/IObserver&amp;lt;T&amp;gt; support from the Reactive Framework (“Rx Framework” or sometimes “LinqToEvents”). It is a really powerful way to use reactive programming in .NET and especially in F# developed by Erik Meijer and his team.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+11%2f02%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f02%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+11%2f02%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f02%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+11%2f02%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/11/02/f-discoveries-this-week-11-02-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19634" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/presentations/default.aspx">presentations</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F7/default.aspx">F7</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Immutable+Range/default.aspx">Immutable Range</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Immutable/default.aspx">Immutable</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/discriminated+unions/default.aspx">discriminated unions</category></item><item><title>F# Discoveries This Week 10/04/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx</link><pubDate>Mon, 05 Oct 2009 01:57:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:19389</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/19389.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=19389</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=19389</wfw:comment><description>&lt;p&gt;I’m back from my three week vacation and am just about buried in fascinating functional programming links.&amp;#160; I’ve managed to get through most of them and have selected the best of these for this very special welcome back edition of Discoveries This Week.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.vimeo.com/album/128851"&gt;CUFP (Commercial Users of Functional Programming) 2009 Videos&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Functional languages have been under academic development for over 25 years, and remain fertile ground for programming language research. Recently, however, developers in industrial, governmental, and open-source projects have begun to use functional programming successfully in practical applications. In these settings, functional programming has often provided dramatic leverage, including whole new ways of thinking about the original problem.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://sharpmalib.codeplex.com/"&gt;M&amp;lt;’a&amp;gt; Lib (F# and C# LINQ) Monads Library&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Unified collection of Monads (M, unit, *) implemented in the Microsoft F# Language.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Implemented so far: Identity, Maybe, State and List with many more to come.&amp;#160; The project lead is actively looking for help.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://flyingfrogblog.blogspot.com/2009/09/f-vs-ocaml.html"&gt;Flying Frog’s F# vs OCaml: Image Processing&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Fortunately, this inefficiency can be overcome by using Just-In-Time (JIT) compilation instead of static compilation and partially specializing polymorphism away before JIT compilation. This is the intended design for polymorphism in HLVM and the inspiration was drawn from Microsoft's excellent implementation of the CLR.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Consequently, the equivalent F# program is 100× faster than the OCaml.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This JIT optimization speed enhancement is astounding by any measure. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://resourcekit.windowshpc.net/MORE_INFO/FSharpHPC.html"&gt;HPC Development Using F#&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“This white paper introduces the F# programming language in the context of technical computing, and demonstrates how F# can be used for both shared-memory parallel programming using the Task Parallel Library, and distributed parallel programming using a Windows HPC Server 2008-based cluster and the Message Passing Interface (MPI).”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Matthew Podwysocki’s Generically Constraining F# Pars &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/09/14/constraining-f.aspx"&gt;One&lt;/a&gt;, &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/09/27/generically-constraining-f-part-ii.aspx"&gt;Two&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2009/10/02/generically-constraining-f-part-iii.aspx"&gt;Three&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Generic constraints inside .NET has always been a fun enterprise, especially given how C# handles them&amp;#160; There has been &lt;/em&gt;&lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2009/09/10/generic-constraints-for-enums-and-delegates.aspx"&gt;&lt;em&gt;some discussion on Jon Skeet’s blog&lt;/em&gt;&lt;/a&gt;&lt;em&gt; about the fact that C# does not allow for generic constraints referring to a number of types. […] However, as Jon correctly points out, this is indeed supported by the CLR directly.&amp;#160; In fact, with our knowledge of &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd233203%28VS.100%29.aspx"&gt;&lt;em&gt;F# constraints&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, we can write this exact function in F# without any such issue.”&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;;subject=F%23+Discoveries+This+Week+10%2f04%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+10%2f04%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;title=F%23+Discoveries+This+Week+10%2f04%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+10%2f04%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx&amp;amp;;title=F%23+Discoveries+This+Week+10%2f04%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/10/04/f-discoveries-this-week-10-04-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19389" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/image+processing/default.aspx">image processing</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/HPC/default.aspx">HPC</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/generics/default.aspx">generics</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/monads/default.aspx">monads</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/cufp/default.aspx">cufp</category></item><item><title>Discoveries This Week 04/03/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx</link><pubDate>Sun, 05 Apr 2009 01:42:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17932</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17932.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17932</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17932</wfw:comment><description>&lt;p&gt;With the start of our F# User’s Group this next Monday and &lt;a href="http://blogs.msdn.com/cbowen/archive/2009/03/23/code-camp-11-the-schedule.aspx"&gt;New England Code Camp 11 last weekend&lt;/a&gt;, things have been extremely busy this past week.&amp;nbsp; Meanwhile, the F# sociocosm is growing at a rapid pace.&amp;nbsp; This week we have a talk by Don Syme, a look at F# quotations, and finally, some discussion on Seq.unfold.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Chris Bowen’s Post, &lt;a href="http://blogs.msdn.com/cbowen/archive/2009/04/01/announcing-the-f-user-group-in-cambridge-ma-april-6.aspx"&gt;Announcing F# User Group in Cambridge - April 6&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;A shameless plug here for &lt;a href="http://fsug.org/"&gt;our new user group&lt;/a&gt;.&amp;nbsp; A big thanks to Chris for helping us find the resources we needed to start out.&amp;nbsp; Without him this might never have come together. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Don Syme’s Talk, &lt;a href="http://channel9.msdn.com/posts/martinesmann/Don-Syme-FSharp-and-functional-programming-in-NET/"&gt;F# and functional programming in .NET&lt;/a&gt; &lt;/h3&gt; &lt;p&gt;As &lt;a href="http://blogs.msdn.com/dsyme/"&gt;Don Syme is the father of F#&lt;/a&gt;, when he speaks the community listens.&amp;nbsp; In this talk &lt;strong&gt;Don focuses on the pleasure and speed inherent in using FP and F#.&amp;nbsp; &lt;/strong&gt;He does this by describing the functional methodology and constructs which provide a simpler and more elegant model for building programs.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Alex P’s Post, &lt;a href="http://www.russiantequila.com/wordpress/?p=42"&gt;F# quotations at their simplest&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;A simple example on the surface for sure.&amp;nbsp; However, if you haven’t seen the power of F#’s language oriented programming features this is sure to be of interest.&lt;/p&gt; &lt;p&gt;For a deeper look at the power of quotations check out &lt;a href="http://tomasp.net/blog/quotvis.aspx"&gt;Tomáš Petříček’s F# quotations visualizer&lt;/a&gt;.&amp;nbsp; If his past projects are any indication &lt;a href="http://tomasp.net/blog/functional-2nd-review.aspx"&gt;Tom’s upcoming book&lt;/a&gt; is a must have for any F# enthusiast.&amp;nbsp; &lt;a href="http://www.amazon.com/dp/1933988924?tag=httptomasnet-20&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=1933988924&amp;amp;adid=0GP01V4BXTYC4N0Q8X7N&amp;amp;"&gt;I preordered a copy just today&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Martin Peck’s Post, &lt;a href="http://blogs.msdn.com/mpeck/archive/2009/04/01/solving-problems-in-c-and-f-part-2.aspx"&gt;Solving Problems in C# and F# - Part 2&lt;/a&gt;&amp;nbsp;&lt;br&gt;(&lt;a href="http://blogs.msdn.com/mpeck/archive/2009/04/01/update-to-solving-problems-in-c-and-f-part-2.aspx"&gt;and update&lt;/a&gt;)&lt;/h3&gt; &lt;p&gt;One of the most fantastic things F# has to offer is the rich functional programming heritage of &lt;a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2008/06/16/functional-c-learn-from-f-and-linq.aspx"&gt;sequence operations&lt;/a&gt;.&amp;nbsp; To demonstrate how elegant they can make your code, &lt;a href="http://en.csharp-online.net/FSharp_Functional_Programming&amp;mdash;Lazy_Evaluation"&gt;I would like to offer the following alternative F# solution&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;let &lt;/span&gt;fibs = 
  Seq.unfold (&lt;span style="color:blue;"&gt;fun &lt;/span&gt;(a, b) &lt;span style="color:blue;"&gt;-&amp;gt; &lt;/span&gt;Some( a, (b, a+b) )) (0I, 1I)&lt;/font&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;Seq.find (&lt;span style="color:blue;"&gt;fun &lt;/span&gt;n &lt;span style="color:blue;"&gt;-&amp;gt; &lt;/span&gt;n &amp;gt;= 10I ** 999I ) fibs&lt;/font&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;I’m going to take this opportunity to point out the obvious: &lt;strong&gt;we have here two lines of F# which does almost exactly the same thing as thirty six of C#.&lt;/strong&gt;&amp;nbsp;&amp;nbsp; Now that’s what I call power and elegance.&amp;nbsp; The unfold function pretty much does exactly what yield was doing before, but implicitly in terms of the unfold function.&amp;nbsp; The idea of unfold can be confounding at first and so here is a breakdown of how it works:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;let &lt;/span&gt;fibs =
  Seq.unfold 
    (&lt;span style="color:blue;"&gt;fun &lt;/span&gt;(a, b) &lt;span style="color:blue;"&gt;-&amp;gt; &lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;//generator function, &lt;br&gt;                   //&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;(a, b) is the previous state
      &lt;/span&gt;Some &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;//Option monad, needed for unfold
        &lt;/span&gt;(a, (b, a + b))) &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;//returned tuple: (value, state)&lt;br&gt;                         //or (&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:green;"&gt;first, (second, third))
      &lt;/span&gt;(0I, 1I) &lt;span style="color:green;"&gt;//Initial function state (first, second)&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Note that in this version the state of the next two values in the sequence are always pre-calculated.&amp;nbsp; However, it is easy to avoid this if you instead consider the state in terms of the previous two values:&amp;nbsp; &lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;let &lt;/span&gt;fibs = 
  Seq.unfold (&lt;span style="color:blue;"&gt;fun &lt;/span&gt;(l, l2) &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color:blue;"&gt;-&amp;gt; 
    let &lt;/span&gt;n = l + l2 &lt;span style="color:blue;"&gt;in &lt;/span&gt;Some( n, ( n, l ) ))
    (0I, 1I) &lt;font size="2"&gt;&lt;span style="color:green;"&gt;//(previous, second previous)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;If you want to learn more about unfold I recommend checking out:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Dustin Campell’s Post, &lt;a href="http://diditwith.net/2008/04/03/ApplesAndOranges.aspx"&gt;Apples and Oranges&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is the best description of how unfold works I’ve seen to date.&amp;nbsp; &lt;/p&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;;subject=Discoveries+This+Week+04%2f03%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;;title=Discoveries+This+Week+04%2f03%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;title=Discoveries+This+Week+04%2f03%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;;title=Discoveries+This+Week+04%2f03%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx&amp;amp;;title=Discoveries+This+Week+04%2f03%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/04/04/discoveries-this-week-04-03-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17932" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/don+syme/default.aspx">don syme</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsug/default.aspx">fsug</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/unfold/default.aspx">unfold</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/seq/default.aspx">seq</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/quotations/default.aspx">quotations</category></item><item><title>Let’s Wax Functional 03/06/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx</link><pubDate>Sat, 07 Mar 2009 23:09:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17631</guid><dc:creator>RickM</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17631.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17631</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17631</wfw:comment><description>&lt;p&gt;This week we have MapReduce, WebTools and yet another F# to C# language comparison.&amp;nbsp; I spent yesterday at a &lt;a href="http://www.scrumalliance.org/events/74-scrum-and-team-foundation-seminar"&gt;seminar led by Michael de la Maza&lt;/a&gt;.&amp;nbsp; He, &lt;a href="http://talbottc.spaces.live.com/"&gt;Talbot Crowell&lt;/a&gt; and I will soon be starting a F# user’s group in Boston, Massachusetts.&amp;nbsp; I’m interested in any comments you might have.&amp;nbsp; Please feel free to send me an email if you would like to discuss speaking at it or content you would like to see covered.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Blog - &lt;a href="http://weblogs.asp.net/podwysocki/archive/2009/03/03/exploring-mapreduce-with-f.aspx"&gt;Matthew Podwysocki’s Exploring MapReduce with F#&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Google’s &lt;a href="http://en.wikipedia.org/wiki/MapReduce"&gt;MapReduce&lt;/a&gt; software framework has revolutionized the way software engineers think about processing large data sets.&amp;nbsp; Since it’s introduction at least 15 variants have been developed.&amp;nbsp; Thorough as always, Matthew explores what MapReduce is, how it relates to functional programming and, finally, shows his own light-weight MapReduce implementation.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Software – Thomas Petricek’s &lt;a href="http://www.codeplex.com/fswebtools"&gt;FSharp.WebTools&lt;/a&gt;&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;The F# Web Tools augment the F# distribution with tools to author homogeneous client/server/database web applications in one type-checked project. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It does this by generating Javascript from F#.&amp;nbsp; The big advantage here is that you can effectively have statically checked Javascript and so &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/10/15/anders-hejlsberg-on-the-future-of-programming-languages.aspx"&gt;avoid a whole class of bugs that come along with dynamically typed programming&lt;/a&gt;.&amp;nbsp; While many are &lt;a href="http://clivetong.spaces.live.com/blog/cns%213F21DF299C355E7F%21220.entry"&gt;excited about this prospect&lt;/a&gt;, at least one person seems to have had &lt;a href="http://cid-05f59721c89c5188.profile.live.com/"&gt;trouble getting it to work&lt;/a&gt;.&amp;nbsp; Currently, only the source tree is available and it must be manually compiled.&amp;nbsp; I know I’m not the only one hoping for a tested release in the near future.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Blog – &lt;a href="http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx"&gt;Martin Peck’s Solving Problems in C# and F# – Part 1&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this post Martin compares solutions to Project Euler problems 10 and 12 in both C# and F#.&amp;nbsp; In competition with his friend Giles Knap, he wrote his answers in C# while Giles wrote in F#.&amp;nbsp; Afterward, each set of answers is discussed independently.&amp;nbsp; He concludes that the languages were equally readable but the F# implementations were slower.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;I wish Giles had written a rebuttal post as Martin seems to be a die hard C# fan.&amp;nbsp; I don’t agree that they were equally readable.&amp;nbsp; The F# problems lacked much of the syntactic cruft and whitespace found in the C# examples.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;Also, as single core results are fast becoming meaningless, it would be very if they would agree to use asynchronous workflows in F# and compare that with the .NET Parallel Extensions in C#.&amp;nbsp; By constraining the answers to be single thread only, it seems like they avoided much of F#’s inherent benefit in multicore processing.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;I also can’t help wondering how each of their prime generating examples would compare with the &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;memoizing example I mentioned two weeks ago&lt;/a&gt;.&amp;nbsp; I’d be shocked to see a similar C# implementation in anywhere near as little space.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;;subject=Let%e2%80%99s+Wax+Functional+03%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+03%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;title=Let%e2%80%99s+Wax+Functional+03%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+03%2f06%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+03%2f06%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/03/07/let-s-wax-functional-03-06-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17631" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/google/default.aspx">google</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/javascript/default.aspx">javascript</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/web/default.aspx">web</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/csharp/default.aspx">csharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/webtools/default.aspx">webtools</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/mapreduce/default.aspx">mapreduce</category></item><item><title>Let’s Wax Functional 02/27/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx</link><pubDate>Fri, 27 Feb 2009 21:22:24 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17564</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17564.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17564</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17564</wfw:comment><description>&lt;p&gt;This week I have a very diverse set of topics:&amp;#160; First, using the functional programming concept of folds in C# to reimplement much of LINQ.&amp;#160; Then a bit of reflection on F# Grammar Parsers.&amp;#160; Finally, some community discussion on real world F# applications.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog – &lt;a href="http://weblogs.asp.net/podwysocki/archive/2009/02/26/functional-c-fun-with-folds.aspx"&gt;Matthew Podwysocki’s Functional C#, Fun With Folds&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this post Matthew reimplements much of LINQ using folds over IEnumerable.&amp;#160; This post is a great opportunity for those who are living in the C# world to see how some of the constructs in the functional programming world work.&amp;#160; I particularly like how Matt went the extra mile and included &lt;a href="http://research.microsoft.com/en-us/projects/Pex/"&gt;Pex&lt;/a&gt; tests for his examples.&amp;#160; It gives extra clarity to his already well defined extension methods.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software – &lt;a href="http://www.quanttec.com/fparsec/"&gt;FParsec, A Parser Combinator Library for F#&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;The basic idea behind a Parser Combinator is that you use it to build a parser with a large vocabulary out of a set of single vocabulary sub parsers.&amp;#160; The claim is that, while this technique may not result in code that is as easy to read as something along the lines of fsyacc, it supports grammars which are much more complex while simultaneously allowing for an ultimately more extensible implementation.&lt;/p&gt;  &lt;p&gt;I personally have not yet spent much time with either fsyacc or FParsec, but it’s interesting to contrast their different bottom up and top down approaches.&amp;#160; &lt;a href="http://stepheneasey.wordpress.com/2009/02/11/fslex-and-fsyacc-tutorial-parsing-sql/"&gt;Fsyacc seems ideal for parsing simple grammars such as SQL&lt;/a&gt;.&amp;#160; The resulting code is very to understand and looks as though it would be similarly fast to write.&amp;#160; However, if you wanted to implement something along the lines of regular expressions, FParsec seems a much better choice due to it’s direct support of infinite look-ahead.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Stack Overflow – &lt;a href="http://stackoverflow.com/questions/568827/what-areas-of-code-are-you-using-f-for"&gt;What areas of code are you using F# for?&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;A quick survey of Stack-Overflowers shows some uses cases for F# beyond DSL and Concurrency.&amp;#160; My personal favorites are statistical calculations and visualizations as they can be a nightmare to deal with in C#.&amp;#160; Also, as &lt;a href="http://talbottc.spaces.live.com/"&gt;Talbott Crowell&lt;/a&gt; awed many with at the &lt;a href="http://blogs.msdn.com/cbowen/archive/2009/01/29/boston-msdn-developer-conference-summary.aspx"&gt;recent MSDN Boston conference&lt;/a&gt;, F# can be leveraged to easily make some amazing time-sensitive visualizations.&amp;#160; &lt;/p&gt;  &lt;p&gt;I was also surprised that more people weren’t using F# for testing or scripting as they are also both very good use cases.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;A Note From Rick&lt;/h3&gt;  &lt;p&gt;I apologize for so frequently changing the name of my weekly roundup post.&amp;#160; Over the last few months it’s moved more and more in the direction of FP in .NET and so I felt “Discoveries this Week” was no longer appropriate.&amp;#160; Last week I decided to change the name but, after some reflection, it seems my choice was much too wordy.&amp;#160; I think I’ve finally found a name that fits.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;;subject=Let%e2%80%99s+Wax+Functional+02%2f27%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+02%2f27%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;title=Let%e2%80%99s+Wax+Functional+02%2f27%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+02%2f27%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx&amp;amp;;title=Let%e2%80%99s+Wax+Functional+02%2f27%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/27/let-s-wax-functional-02-27-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17564" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fparsec/default.aspx">fparsec</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/parser/default.aspx">parser</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/folds/default.aspx">folds</category></item><item><title>Functional Discoveries in the Microsoft Sociocosm 02/20/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx</link><pubDate>Fri, 20 Feb 2009 17:41:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17518</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17518.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17518</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17518</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;This week we have practical examples of Lazy Evaluation with Memoization, an interview with Don Syme and a discussion on the Visitor Pattern’s place in F#.&amp;#160; Also, any comments on the new title for my weekly posting would be appreciated. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Forum – &lt;a href="http://cs.hubfs.net/forums/thread/8896.aspx"&gt;Memoization and Lazy Evaluation in F# on HubFS&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this thread &lt;a href="http://lorgonblog.spaces.live.com/blog/"&gt;brianmcm (Brian McNamara)&lt;/a&gt; and &lt;a href="http://cs.hubfs.net/search/SearchResults.aspx?q=divisortheory"&gt;divisortheory&lt;/a&gt; (???) explore using &lt;a href="http://blogs.msdn.com/dsyme/archive/2007/05/31/a-sample-of-the-memoization-pattern-in-f.aspx"&gt;memorization&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/podwysocki/archive/2008/03/21/adventures-in-f-f-101-part-6-lazy-evaluation.aspx"&gt;LazyLists&lt;/a&gt; to optimize a &lt;a href="http://en.wikipedia.org/wiki/Trial_division"&gt;Trial Division&lt;/a&gt; driven prime generator.&amp;#160; It’s interesting to look at how their prime generator evolved over time as they incorporated these ideas and optimized.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Article – &lt;a href="http://www.computerworld.com.au/article/271034/-z_programming_languages_f"&gt;Kathryn Edwards interviews Don Syme on F# Development&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this technically light but still extremely interesting interview, Kathryn mainly directs the conversation in the direction of the development and adoption of the F# programming language.&amp;#160; The most interesting thing I gleaned from the interview?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;One of the key designers of Haskell, Simon Peyton-Jones, is just down the corridor from me at Microsoft Research Cambridge and has been a great help with F#.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Perhaps my &lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx"&gt;F#/Haskell genealogy graph&lt;/a&gt; needs an additional arrow.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog – &lt;a href="http://stepheneasey.wordpress.com/2009/02/12/visitor-pattern-in-c-and-f/"&gt;Stephen Easey’s (?) Visitor Patten in C# and F#&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In this post Stephen explores the &lt;a href="http://www.primos.com.au/primos/Default.aspx?PageContentID=12&amp;amp;tabid=63"&gt;Visitor Patten&lt;/a&gt; in both C# and F#.&amp;#160; I always love to see examples of how much more beautiful and concise F# is than C#.&amp;#160; The 218 line C# implementation shown beside the same implementation in 64 lines of F# makes for a great comparison in this regard.&amp;#160; &lt;/p&gt;  &lt;p&gt;I agree with Stephen’s conclusion in that, given the purpose of the visitor pattern is to separate algorithm from object via a &lt;a href="http://en.wikipedia.org/wiki/Double_dispatch"&gt;double dispatch&lt;/a&gt; layer, in many situations the visitor pattern is unnecessary in F# because of its advanced pattern matching capabilities.&lt;/p&gt;  &lt;p&gt;However, I feel that he may not have considered the perspective of an API provider.&amp;#160; In this context, it may be desirable for the consumer of an API to be able to extend the dispatch process to handle new cases.&amp;#160; The issue with a single monolithic matching function is that all of the logic is contained within that single function and so the system is no longer nearly as open to extension.&amp;#160; This violation of the &lt;a href="http://en.wikipedia.org/wiki/Open/closed_principle"&gt;Open Closed Principle&lt;/a&gt; (which applies to building APIs in any type of language) will make for difficult to reuse software.&amp;#160; &lt;/p&gt;  &lt;p&gt;Perhaps a F# pattern matching equivalent could be made with lambda functions for each branch.&amp;#160; Lambdas could be curried into the matching function and so each branch could potentially be replaced with new logic by the consumer.&amp;#160; However, this is feels to me like reimplementing OO with FP constructs.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;;subject=Functional+Discoveries+in+the+Microsoft+Sociocosm+02%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;;title=Functional+Discoveries+in+the+Microsoft+Sociocosm+02%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;title=Functional+Discoveries+in+the+Microsoft+Sociocosm+02%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;;title=Functional+Discoveries+in+the+Microsoft+Sociocosm+02%2f20%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx&amp;amp;;title=Functional+Discoveries+in+the+Microsoft+Sociocosm+02%2f20%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/02/20/functional-discoveries-in-the-microsoft-sociocosm-02-20-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17518" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/lazy+evaluation/default.aspx">lazy evaluation</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/interview/default.aspx">interview</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/memoization/default.aspx">memoization</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/don+syme/default.aspx">don syme</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/double+dispatch/default.aspx">double dispatch</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/visitor+pattern/default.aspx">visitor pattern</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/lazy/default.aspx">lazy</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/open+closed+principle/default.aspx">open closed principle</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/csharp/default.aspx">csharp</category></item><item><title>Discoveries This Week 01/23/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx</link><pubDate>Fri, 23 Jan 2009 18:17:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17309</guid><dc:creator>RickM</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17309.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17309</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17309</wfw:comment><description>&lt;p&gt;Another very exciting week.&amp;#160; I’ve barely had time to catch my breath.&lt;/p&gt;  &lt;p&gt;Meanwhile I’ve decided to take my weekly roundup post consistently in the direction of functional programming in the Microsoft universe for the foreseeable future.&amp;#160; This will be with a heavy slant towards software engineering and, of course, F#.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Post: &lt;a href="http://blogs.tedneward.com/2009/01/18/Building+WCF+Services+With+F+Part+1.aspx"&gt;Ted Neward’s Building WCF Services with F# Part 1&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;It’s always interesting to see F# applied to existing Microsoft .NET infrastructure.&amp;#160; In this case I was particularly impressed with how well the ideologies of the two technologies fit together. &lt;/p&gt;  &lt;p&gt;However, the most important thing about Ted’s post is that it notes a bug in WCF that could cause quite a bit of headache if it caught you unaware.&amp;#160; When using a F# declared interface, if no name is explicitly specified for a function parameter, WCF will throw an ArgumentNullException.&amp;#160; &lt;/p&gt;  &lt;p&gt;This will be manifest in the following situations:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;When svcutil.exe is run on the assembly. &lt;/li&gt;    &lt;li&gt;When you attempt to construct a ServiceHost with the interface. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The issue stems from that fact that traditional .NET languages cannot have nameless parameters.&amp;#160; Thanks for figuring out this problem for us Ted.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;&amp;#160;&amp;#160; &lt;h3&gt;Code: &lt;a href="http://code.google.com/p/wcf-examples/source/browse/#svn/trunk/FSharpExamples"&gt;Ray Vernagus’s WCF F# Examples&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;As he &lt;a href="http://vernagus.blogspot.com/2009/01/f-and-wcf-examples.html"&gt;posted in response to Ted’s above&lt;/a&gt;, Ray has been working towards getting his &lt;a href="http://www.microsoft.com/learning/en/us/exams/70-503.mspx"&gt;MCTS 70-503&lt;/a&gt; certification and has decided to do all of his examples in F#.&amp;#160; Making this kind of information available is a fantastic contribution to the F# community.&amp;#160; I hope that in the future ray will both write more in more depth about his experiences and continue to provide samples.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Code: &lt;a href="http://github.com/namin/spots/tree/master/probabilisticModeling"&gt;Nada Amin’s Probabilistic Modeling in Three Languages&lt;/a&gt; &lt;/h3&gt;  &lt;p&gt;In Chapter 9 of &lt;a href="http://www.expert-fsharp.com/default.aspx"&gt;Expert F#&lt;/a&gt; the idea of using a Monad to represent a probability distribution is presented with code examples.&amp;#160; &lt;a href="http://spotless-spots.blogspot.com/2008/12/probabilistic-modeling-in-haskell.html"&gt;Nada&lt;/a&gt; has rewritten this example in both &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; and &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt;.&amp;#160; While they may not all be optimal implementations for each language, this provides an interesting opportunity to compare each language syntactically.&amp;#160; I’m somewhat tempted to submit a &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; implementation to round it off. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Code: &lt;a href="http://code.msdn.microsoft.com/fsharpsamples"&gt;Microsoft’s Official F# Samples Version 0.1&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Yesterday, at the Boston MSDN Conference, &lt;a href="http://talbottc.spaces.live.com/"&gt;Talbott Crowell&lt;/a&gt; showed off some really amazing examples from this package.&amp;#160; This is a must have for any potential F# developer as the samples not only show how off the features of the API, they also demonstrate proper coding practices.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Software: &lt;a href="http://www.codeplex.com/ora"&gt;Ora (Visual Studio Add-in)&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;Ora is a add-in which provides a simple yet dynamic overview of the file you are currently editing in Visual Studio.&amp;#160; Although I haven’t had a chance to test it in F# as of yet, Ora is my new favorite tool for every-day use in Visual Studio.&amp;#160; &lt;/p&gt;  &lt;p&gt;I no longer scroll up and down the code or try to sort through Visual Studio’s terrible method dropdown.&amp;#160; Instead, I have access to a custom visualization of the class I am working on all of the time.&amp;#160; The best part is that it fits perfectly over my properties window which I rarely use and have always considered to be a waste of space. &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;subject=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f23%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/23/discoveries-this-week-01-23-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17309" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/clojure/default.aspx">clojure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/VS2008/default.aspx">VS2008</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/wcf/default.aspx">wcf</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/scala/default.aspx">scala</category></item><item><title>Discoveries This Week 01/16/2009</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx</link><pubDate>Fri, 16 Jan 2009 16:17:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17229</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17229.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17229</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17229</wfw:comment><description>&lt;p&gt;This week’s theme is functional programming.&amp;#160; Included are discussions on Software Transactional Memory, Functional Architecture and the impact of the CLR on functional Programming in .NET.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://www.brandonwerner.com/2009/01/01/software-transactional-memory-debunked/"&gt;Brandon Werner’s Software Transactional Memory: Debunked!&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;In starting with a title that is decidedly sensationalistic, Brandon effectively trashes STM over its expensive overhead based on a &lt;a href="http://portal.acm.org/citation.cfm?doid=1400214.1400228"&gt;paper published by ACM&lt;/a&gt;.&amp;#160; His position, and that of the researchers, is that most programmers see assignment as inexpensive and so would not understand that they need to optimize for atomic transactions when using STM.&amp;#160; &lt;/p&gt;  &lt;p&gt;Brian Hurt responded at length in his blog post &lt;a href="http://enfranchisedmind.com/blog/2009/01/02/the-problem-with-stm-your-languages-still-suck/"&gt;The Problem with STM: your languages still suck&lt;/a&gt;.&amp;#160; Brian’s view is that the fundamental issue here is that most programming languages encourage heavy use of mutable variables and so many expensive assignments and reads are happening when STM is used.&amp;#160; If instead one is using a functional programming language which discourages variable mutations, the high cost of STM is much less of an issue.&amp;#160; Brian then further flushes out his ideas in a &lt;a href="http://enfranchisedmind.com/blog/2009/01/10/responses-to-the-problem-with-stm/"&gt;follow up blog&lt;/a&gt; in which he responds to responses to his first.&lt;/p&gt;  &lt;p&gt;While I don’t agree that ACM’s analysis “puts a deep nail in the coffin of STM”, I also don’t think it’s reasonable to expect most programmers will be jumping on the functional programming bandwagon in the near future.&amp;#160; The main issue is that it’s just too different from what they are used to.&amp;#160; &lt;/p&gt;  &lt;p&gt;For now FP will remain the domain of the motivated and pragmatic programmer.&amp;#160; It will be necessary to slowly ease the majority into this new, different world via things like functional C# extensions.&amp;#160; I do think that some kind of STM with training wheels for mainstream programmers would be a good way to promote this over the long term.&amp;#160; However, it would be extremely important that the inherent overhead is explicitly stated.&lt;/p&gt;  &lt;p&gt;Finally, I wanted to note that &lt;a href="http://blogs.msdn.com/stmteam/archive/2009/01/02/transactional-memory-in-a-real-world.aspx"&gt;Sasha Dadiomov of the Microsoft STM team has an interesting piece on the difficulties involved in debugging STM&lt;/a&gt;.&amp;#160; It’s an informative glimpse of how Microsoft’s implementation of STM is shaping up.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://blogs.msdn.com/chrsmith/archive/2008/12/30/speech-recognition-is-gun-and-easy.aspx"&gt;Chris Smith’s Speech Recognition is gun [sic] and easy!&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;It’s possible he meant fun and easy but I can’t be sure.&amp;#160; &lt;/p&gt;  &lt;p&gt;A quick but fun piece on leveraging System.Speech.Dll inside of F#.&amp;#160; The result is a 10 line program that takes your speech as input and prints it to the console.&amp;#160; Very simple yet quite cool.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Blog: &lt;a href="http://weblogs.asp.net/podwysocki/archive/2009/01/13/how-would-the-clr-be-different.aspx"&gt;Matthew Podwysocki’s How would the CLR Be Different?&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In this post Matthew discusses how the CLR might be better implemented to serve the needs of functional programming languages.&amp;#160; I especially like the idea of including some new functionality for type manipulation and construction.&lt;/p&gt;  &lt;p&gt;However, I would like to see specific examples of exactly what Matthew would like changed under the hood.&amp;#160; He mentions a lot of general goals with reasoning to back them up but not how they might be implemented.&amp;#160; I also feel that it would be inappropriate to implement some of these ideas at the CLR level instead of the language or API level.&lt;/p&gt;  &lt;p&gt;For example, non-null references.&amp;#160; I’m all for Spec# style pre and post conditions but why is it necessary that this be implemented at the CLR level?&amp;#160; This belongs in the language instead.&amp;#160; Also, the issue with immutability in .NET mostly has to do with Microsoft’s .NET API design.&amp;#160; The stack based nature of IL is completely compatible with the idea.&lt;/p&gt;  &lt;p&gt;The CLR should be designed with the most general case in mind and not with the slant towards any particular language.&amp;#160; If the CLR is to be viable long term, flexibility must be emphasized over specific optimizations.&amp;#160; &lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;Paper: &lt;a href="http://funct.org/wiki/#Building%20a%20Wiki%20in%20Haskell.html"&gt;Sebastiaan Visser’s Building a Wiki in Haskell&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;A study on implementing a Wiki in Haskell which is a purely functional programming language.&amp;#160; This paper is a must read for both those interested in functional project architecture and those who question the viability of using FP for large applications.&amp;#160; The complete source of the project is available for your viewing pleasure.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;subject=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx&amp;amp;;title=Discoveries+This+Week+01%2f16%2f2009&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/16/discoveries-this-week-01-16-2009.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17229" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/concurrency/default.aspx">concurrency</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/memory/default.aspx">memory</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/design/default.aspx">design</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/software+transactional+memory/default.aspx">software transactional memory</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/stm/default.aspx">stm</category></item><item><title>Discoveries This Week 01/09/2008</title><link>http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/09/discoveries-this-week-01-09-2008.aspx</link><pubDate>Fri, 09 Jan 2009 16:37:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17126</guid><dc:creator>RickM</dc:creator><slash:comments>3</slash:comments><comments>http://www.atalasoft.com/cs/blogs/rickm/comments/17126.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/rickm/commentrss.aspx?PostID=17126</wfw:commentRss><wfw:comment>http://www.atalasoft.com/cs/blogs/rickm/rsscomments.aspx?PostID=17126</wfw:comment><description>It’s been a very exciting week. I actually had more things to post than time would allow me to write about. I’ll have to save them for next time. Blog: Daniel Spiewak’s What is Hindley-Milner? (and why is it cool?) Hindley-Milner is the algorithm all...(&lt;a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/09/discoveries-this-week-01-09-2008.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17126" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/clojure/default.aspx">clojure</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/programming/default.aspx">programming</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/F_2300_/default.aspx">F#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/functional/default.aspx">functional</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/object+oriented/default.aspx">object oriented</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/code/default.aspx">code</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/fsharp/default.aspx">fsharp</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/reflection/default.aspx">reflection</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/languages/default.aspx">languages</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/roundup/default.aspx">roundup</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/haskell/default.aspx">haskell</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/algorithms/default.aspx">algorithms</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/decorators/default.aspx">decorators</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/continuous+integration/default.aspx">continuous integration</category><category domain="http://www.atalasoft.com/cs/blogs/rickm/archive/tags/attributes/default.aspx">attributes</category></item></channel></rss>