<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Ulf Wiger</title>
	<atom:link href="http://ulf.wiger.net/weblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://ulf.wiger.net/weblog</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Wed, 11 Jun 2008 14:13:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Indentation-sensitive Erlang 3</title>
		<link>http://ulf.wiger.net/weblog/2008/06/11/indentation-sensitive-erlang-3/</link>
		<comments>http://ulf.wiger.net/weblog/2008/06/11/indentation-sensitive-erlang-3/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 14:13:12 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[indentation]]></category>

		<category><![CDATA[syntax]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=25</guid>
		<description><![CDATA[At this point, I doubt that I can achieve better than a 90% solution, which is probably just good enough to eventually drive people crazy.]]></description>
			<content:encoded><![CDATA[<p>So, maybe I&#8217;m thick enough not to realise in advance when I&#8217;m barking up the wrong tree, or perhaps I just like to follow things through to the bitter end, just to know what exactly didn&#8217;t work&#8230;?</p>
<p>I&#8217;ve gone one more round with my indentation-sensitive Erlang scanner/parser. For a while, it looked like I was winning, but eventually, I had to admit defeat in the face of funs and record constructors.</p>
<p>Again, the approach I thought I&#8217;d take was to add indentation tokens to the normal scanner, and then add rule clauses to the normal grammar to make it understand both indentation-sensitive code, and all the code you&#8217;re accustomed to writing. The normal parser is an LR(1) grammar, which means that the additions have to be quite symmetrical in order to work.</p>
<p>This seemed to work in just about all the places that mattered, but I was stumped by funs and record constructors. The main with funs was that you could no longer write them in the conventional way (failing one of my preconditions), and record constructors usually cannot be written without including a few commans in a way that was &#8230;uhm, less than obvious.</p>
<p>I include the test module, which pretty much illustrates what works, and what doesn&#8217;t. At this point, I doubt that I can achieve better than a 90% solution, which is probably just good enough to eventually drive people crazy.</p>
<p>It&#8217;s been fun, though. I&#8217;m have no particular craving for indentation-sensitive syntax myself, so I thought I&#8217;d tackle this as a learning experience. Not for the first time, I feel like concluding that retrofitting concepts onto existing programming languages is usually very difficult to do well.</p>
<p>The code is at <a href="http://svn.ulf.wiger.net/indent/branches/0.3">http://svn.ulf.wiger.net/indent/branches/0.3</a></p>
<blockquote><p>
<code>
<pre>
-module(test).

-record(r,{a,b}).

-compile(export_all).
-scan(indentation).

f(X) -&gt;
    X+2

g(X) -&gt;
    X+4
.          % dot can either be 'outdented' or
           % terminating last line

g1(X) -&gt;
    X+4.

h(X) -&gt;
    Y = case X of
          a -&gt;
            {a}
          b -&gt;
            {b}
    end          % end is optional
    Y

h1(X) -&gt;
    Y = case X of
          a -&gt;
            {a}
          b -&gt;
            {b}
    Y

h2(X) -&gt;
    case X of
        a -&gt;
            1
        b -&gt;
            2

h3(X) -&gt;
    case X of
        a -&gt; 1;  % must use semicolon here <img src='http://ulf.wiger.net/weblog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />
        b -&gt; 2

i(a) -&gt; a
i(b) -&gt; b

j(A,B) -&gt;
    {A
    B}

j1(A,B,C) -&gt;
    {A
     B     % indents must be greater than 1;
     C}    % else they count as aligned

k() -&gt;
    S = "a string "
        "spanning multiple "
        "lines"
    {S}

l0() -&gt;
    fun(1) -&gt; 1; (2) -&gt; 2 end.

l1() -&gt;
    fun            % must break line here and indent.  <img src='http://ulf.wiger.net/weblog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />
      (1) -&gt;
            1
      (2) -&gt;
            2

%%% This, alas, doesn't work <img src='http://ulf.wiger.net/weblog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />
%%%
%%% l2() -&gt;
%%%     fun(1) -&gt;
%%%             1;
%%%        (2) -&gt;
%%%             2
%%%     end

m() -&gt;
    #r{a = 1, b = 2}.

m1() -&gt;
    R = #r{a = 1}
    R#r.a

%%% indentation syntax works poorly for record assignment.
%%% Both commas are needed <img src='http://ulf.wiger.net/weblog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />
m2() -&gt;
    R = #r{a = 1,
           b = 2},
    R

test() -&gt;
    2 = f(0),
    4 = f(2),
    4 = g(0),
    4 = g1(0),
    8 = g(4),
    {a} = h(a),
    {b} = h(b),
    {a} = h1(a),
    {b} = h1(b),
    1 = h2(a),
    2 = h2(b),
    1 = h3(a),
    2 = h3(b),
    a = i(a),
    b = i(b),
    {a,b} = j(a,b),
    {a,b,c} = j1(a,b,c),
    {"a string spanning multiple lines"} = k(),
    F0 = l0(), 1 = F0(1), 2 = F0(2),
    F1 = l1(), 1 = F1(1), 2 = F1(2),
    {r,1,2} = m(),
    1 = m1(),
    ok.
</pre>
<p></code>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/06/11/indentation-sensitive-erlang-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FP seminar panel discussion</title>
		<link>http://ulf.wiger.net/weblog/2008/04/01/fp-seminar-panel-discussion/</link>
		<comments>http://ulf.wiger.net/weblog/2008/04/01/fp-seminar-panel-discussion/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 20:48:02 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[functional programming]]></category>

		<category><![CDATA[haskell]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=24</guid>
		<description><![CDATA[Simon: "If a boat is sinking with 100 people on board and you scatter some life belts in the region, then they'll probably swim and cling on to them, right? Just because life belts float. So functional programming is good stuff, right, and is like this granite, then we'll end up with people clinging on to it."
Joe: "But ... granite sinks."
Simon: "Uuhm, what sinks?"
Joe: "Granite - sinks"
Simon: "...So I shouldn't mix metaphors!"]]></description>
			<content:encoded><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p>
<p>(See <a href="http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/">The full article</a> for more details).</p>
<p><strong>Panel discussion</strong> (<a href="/fp_seminar/panel-debate.flv">Download</a>)<br />
[See post to watch Flash video]</p>
<p>I finally got around to editing out those few details in the discussion that initially prevented me from posting the video.</p>
<p>My own favourite extract from the discussion:</p>
<p><strong>Simon</strong>: &#8220;If a boat is sinking with 100 people on board and you scatter some life belts in the region, then they&#8217;ll probably swim and cling on to them, right? Just because life belts float. So functional programming is good stuff, right, and is like this granite, then we&#8217;ll end up with people clinging on to it.&#8221;<br />
<strong>Joe</strong>: &#8220;But &#8230; granite sinks.&#8221;<br />
<strong>Simon</strong>: &#8220;Uuhm, what sinks?&#8221;<br />
<strong>Joe</strong>: &#8220;Granite - sinks&#8221;<br />
<strong>Simon</strong>: &#8220;&#8230;So I shouldn&#8217;t mix metaphors!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/04/01/fp-seminar-panel-discussion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Erlang statistics</title>
		<link>http://ulf.wiger.net/weblog/2008/04/01/erlang-statistics/</link>
		<comments>http://ulf.wiger.net/weblog/2008/04/01/erlang-statistics/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 11:18:23 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[erlang statistics]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/2008/04/01/erlang-statistics/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Judging by the visitor statistics for <a href="http://www.erlang.org">erlang.org</a> (as of 1 April 2008), the Erlang community seems to be doing well.</p>
<p><a href='http://ulf.wiger.net/weblog/wp-content/uploads/2008/04/erlang-requests-per-month-080401.gif' title='Erlang requests per month'><img src='http://ulf.wiger.net/weblog/wp-content/uploads/2008/04/erlang-requests-per-month-080401.thumbnail.gif' alt='Erlang requests per month' /></a></p>
<p>(Thanks, Bjarne Däcker, for producing the graphs).</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/04/01/erlang-statistics/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Indentation-sensitive Erlang 2</title>
		<link>http://ulf.wiger.net/weblog/2008/03/20/indentation-sensitive-erlang-2/</link>
		<comments>http://ulf.wiger.net/weblog/2008/03/20/indentation-sensitive-erlang-2/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 10:56:17 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[erlang syntax indentation]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/2008/03/20/indentation-sensitive-erlang-2/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>So, I considered the comments (thank you, all), and thought I&#8217;d have another go at making the ending &#8216;dot&#8217; optional.</p>
<p>I decided to introduce another token, &#8216;GAP&#8217;, to denote an empty line. Most likely, the scanner, in its current state, will not be able to handle empty lines with white space in them, etc, and the code is starting to look a bit confused. Oh well&#8230;</p>
<p>The toplevel rule for a function now becomes:</p>
<blockquote><p><code><br />
form -&gt; function dot : '$1'.<br />
form -&gt; function 'GAP' : '$1'.<br />
</code></p></blockquote>
<p>and the rule for alternative function clauses is as before:</p>
<blockquote><p>
<code>
<pre>
function_clauses -&gt; function_clause : ['$1'].
function_clauses -&gt;
   function_clause &#8216;;&#8217; function_clauses : ['$1'|'$3'].
function_clauses -&gt;
  function_clause &#8216;OUT&#8217; : ['$1'].
function_clauses -&gt;
  function_clause &#8216;END&#8217; function_clauses : ['$1'|'$3'].
</pre>
<p></code></p></blockquote>
<p>The first two rules are the original rules for indentation-insensitive code. The last two are for the indentation tokens. The &#8216;OUT&#8217; token is for symmetry, to match the &#8216;IN&#8217; token after the arrow in function_body. Remember that indentation tokens are normalized in the scanner.</p>
<p>The test program now looks like this:</p>
<blockquote><p>
<code>
<pre>
-module(test).

-compile(export_all).
-scan(indentation).

f(X) ->
    X+2

g(X) ->
    X+4
.

h(X) ->
    Y = case X of
          a ->
            {a}
          b ->
            {b}
    end
    Y

i(a) -> a
i(b) -> b

test() ->
    2 = f(0),
    4 = f(2),
    4 = g(0),
    8 = g(4),
    {a} = h(a),
    {b} = h(b),
    a = i(a),
    b = i(b),
    ok.
</pre>
<p></code></p></blockquote>
<p>A little bit better. The &#8216;end&#8217; tokens are still needed, though. One thing at a time&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/03/20/indentation-sensitive-erlang-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Indentation-sensitive Erlang</title>
		<link>http://ulf.wiger.net/weblog/2008/03/19/indentation-sensitive-erlang/</link>
		<comments>http://ulf.wiger.net/weblog/2008/03/19/indentation-sensitive-erlang/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 17:26:19 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[indentation erlang syntax]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/2008/03/19/indentation-sensitive-erlang/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>I was inspired by Chris Okasaki&#8217;s blog <a href="http://okasaki.blogspot.com/2008/02/in-praise-of-mandatory-indentation-for.html">article about mandatory indentation</a>. Not that indentation could be made mandatory in Erlang - it would break way too much code - but the idea of inserting indentation tokens in the token stream did seem simple enough, that I at least had to try it.</p>
<p>I made a copy of erl_scan.erl (named erl_scan_ind.erl) and made it figure out indentation tokens. Then I added to the Erlang grammar in erl_parse.yrl. All the old rules remain, but some new rules were added to account for indentation tokens. For example:</p>
<blockquote><p><code><br />
clause_body -&gt; '-&gt;' exprs: '$2'<br />
</code></p></blockquote>
<p>becomes:</p>
<blockquote><p><code><br />
clause_body -&gt; '-&gt;' exprs: '$2'<br />
clause_body -&gt; '-&gt;' 'IN' exprs 'OUT' : '$3'.<br />
</code></p></blockquote>
<p>The indentation tokens I used were:</p>
<ul>
<li>&#8216;IN&#8217; for indent</li>
<li>&#8216;OUT&#8217; for outdent (one for each matching indent)</li>
<li>&#8216;ALIGN&#8217; for when the next line keeps the same indentation</li>
<li>&#8216;END&#8217; when indentation goes back to zero</li>
</ul>
<p>So a sequence of expressions could be written without commas, based on the following rule:</p>
<blockquote><p><code><br />
exprs -&gt; expr : ['$1'].<br />
exprs -&gt; expr &#8216;,&#8217; exprs : ['$1' | '$3'].<br />
exprs -&gt; expr &#8216;ALIGN&#8217; exprs : ['$1' | '$3'].<br />
</code></p></blockquote>
<p>My test program, which I was eventually able to compile, looked like this:</p>
<blockquote><p><code>
<pre>
-module(test).

-compile(export_all).
-scan(indentation).

f(X) -&gt;
    X+2
.

g(X) -&gt;
    X+4
.

h(X) -&gt;
    Y = case X of
          a -&gt;
            {a}
          b -&gt;
            {b}
    end
    Y
.
</pre>
<p></code></p></blockquote>
<p>(Note especially that the final &#8216;end&#8217; must be aligned with the Y, rather than the &#8216;case&#8217;. Perhaps this could be avoided&#8230;?)</p>
<p>The ending dots don&#8217;t have to be on their own line. Getting rid of them was too hard for me, since &#8216;dot&#8217; is the end token for the Erlang grammar.</p>
<p>The <code>-scan(indentation).</code> attribute tells epp to switch to the indentation-sensitive scanner. <code>-scan(normal).</code> tells it to switch to the normal scanner.</p>
<p>I soon realised that I had to normalize the indentation tokens at the end of the scan. A few oddities were introduced, like inserting an &#8216;OUT&#8217; token before each dot (and corresponding additions to the grammar). But for the most part, the additions to the grammar seemed fairly logical. The parser seems to handle all the old  code, even though I should perhaps try recompiling the whole OTP source tree before making such a claim.</p>
<p>The code (based on OTP R12B-1) can be found at <a href="http://svn.ulf.wiger.net/indent/trunk">http://svn.ulf.wiger.net/indent/trunk</a></p>
<p>The grammar is still contaminated with some debug statements, which allowed me to print the productions as they were identified. They should of course be removed eventually.</p>
<p>I&#8217;m not convinced that this is really a good idea, but at least I had fun doing it.</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/03/19/indentation-sensitive-erlang/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Functional Programming Seminar</title>
		<link>http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/</link>
		<comments>http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:30:59 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[functional programming dsl lava haskell erlang]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=18</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Last week (21 Feb), I had the pleasure of co-hosting a seminar on Functional Programming at Ericsson. We were able to bring an impressive cast of speakers:</p>
<ul>
<li>Simon Peyton-Jones, Microsoft Research</li>
<li>Satnam Singh, Microsoft Research</li>
<li>John Hughes, Chalmers</li>
<li>John Launchbury, Galois</li>
</ul>
<p>Some notable people in the audience were Seif Haridi, Joe Armstrong, Thomas Arts, Mary Sheeran, Koen Claessen</p>
<p>I want to extend my sincere thanks to all the speakers and distinguished guests, and post the seminar slides and videos of the talks for your enjoyment. Some Ericsson-specific content from the seminar has been omitted.</p>
<p>You may view them as streaming video, or download them and watch them locally (using e.g. VLC, QuickTime or the Wimpy FLV Player). I&#8217;ve noted some trouble viewing this many embedded flash streams on a single page, so I&#8217;ve posted each talk individually under the <a href="?cat=5">FP Seminar</a> category. </p>
<p>Links follow, in the order in which they were presented:</p>
<p><a href="http://ulf.wiger.net/weblog/2008/02/29/peyton-jones-taming-effects-the-next-big-challenge/"><strong>Simon Peyton-Jones</strong>:<br />
&#8220;Taming Effects - The Next Big Challenge&#8221;</a></p>
<p><a href="http://ulf.wiger.net/weblog/2008/02/29/satnam-singh-declarative-programming-techniques-for-many-core-architectures/"><strong>Satnam Singh</strong>:<br />
&#8220;Declarative Programming Techniques for Many-Core Architectures&#8221;</a></p>
<p><a href="http://ulf.wiger.net/weblog/2008/02/29/john-hughes-testing-with-quickcheck/"><strong>John Hughes</strong>:<br />
&#8220;Testing with QuickCheck&#8221;</a></p>
<p><a href="http://ulf.wiger.net/weblog/2008/02/29/simon-peyton-jones-composing-contracts-an-adventure-in-financial-engineering/"><strong>Simon Peyton-Jones</strong>:<br />
&#8220;Composing Contracts - An Adventure in Financial Engineering&#8221;</a></p>
<p><a href="http://ulf.wiger.net/weblog/2008/02/29/john-launchbury-high-assurance-software/"><strong>John Launchbury</strong>: &#8220;High-Assurance Software&#8221;</a></p>
<p><strong>(Update)</strong><br />
<a href="http://ulf.wiger.net/weblog/2008/04/01/fp-seminar-panel-discussion/"><strong>Panel discussion</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>John Launchbury: High-Assurance Software</title>
		<link>http://ulf.wiger.net/weblog/2008/02/29/john-launchbury-high-assurance-software/</link>
		<comments>http://ulf.wiger.net/weblog/2008/02/29/john-launchbury-high-assurance-software/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:05:43 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[functional programming haskell ericsson]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=17</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p>
<p>(See <a href="http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/">The full article</a> for more details).</p>
<p><strong>John Launchbury</strong><br />
&#8220;High-Assurance Software&#8221; (<a href="/fp_seminar/launchbury-high-assurance.flv">Download</a>) (<a href="/fp_seminar/galois_high_assurance.pdf">Slides</a>)<br />
[See post to watch Flash video]</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/02/29/john-launchbury-high-assurance-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simon Peyton-Jones: Composing Contracts - An Adventure in Financial Engineering</title>
		<link>http://ulf.wiger.net/weblog/2008/02/29/simon-peyton-jones-composing-contracts-an-adventure-in-financial-engineering/</link>
		<comments>http://ulf.wiger.net/weblog/2008/02/29/simon-peyton-jones-composing-contracts-an-adventure-in-financial-engineering/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:04:50 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[functional programming haskell ericsson]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=16</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p>
<p>(See <a href="http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/">The full article</a> for more details).</p>
<p><strong>Simon Peyton-Jones</strong><br />
&#8220;Composing Contracts - An Adventure in Financial Engineering&#8221; (<a href="/fp_seminar/peyton-contracts.flv">Download</a>) (<a href="/fp_seminar/Options-Ericsson-Feb08.pdf">Slides</a>)<br />
[See post to watch Flash video]</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/02/29/simon-peyton-jones-composing-contracts-an-adventure-in-financial-engineering/feed/</wfw:commentRss>
		</item>
		<item>
		<title>John Hughes: Testing with QuickCheck</title>
		<link>http://ulf.wiger.net/weblog/2008/02/29/john-hughes-testing-with-quickcheck/</link>
		<comments>http://ulf.wiger.net/weblog/2008/02/29/john-hughes-testing-with-quickcheck/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:03:31 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[Erlang]]></category>

		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[functional programming quickcheck erlang ericsson]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=15</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p>
<p>(See <a href="http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/">The full article</a> for more details).</p>
<p><strong>John Hughes</strong><br />
&#8220;Testing with QuickCheck&#8221; (<a href="/fp_seminar/hughes-quickcheck.flv">Download</a>) (<a href="/fp_seminar/Testing_with_QuickCheck.pdf">Slides</a>)<br />
[See post to watch Flash video]</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/02/29/john-hughes-testing-with-quickcheck/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Satnam Singh: Declarative Programming Techniques for Many-Core Architectures</title>
		<link>http://ulf.wiger.net/weblog/2008/02/29/satnam-singh-declarative-programming-techniques-for-many-core-architectures/</link>
		<comments>http://ulf.wiger.net/weblog/2008/02/29/satnam-singh-declarative-programming-techniques-for-many-core-architectures/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:02:18 +0000</pubDate>
		<dc:creator>Ulf Wiger</dc:creator>
		
		<category><![CDATA[FP Seminar]]></category>

		<category><![CDATA[functional declarative programming dsl laval haskell]]></category>

		<guid isPermaLink="false">http://ulf.wiger.net/weblog/?p=14</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>From a Functional Programming seminar at Ericsson, 21 February 2008</p>
<p>(See <a href="http://ulf.wiger.net/weblog/2008/02/29/functional-programming-seminar-2/">The full article</a> for more details).</p>
<p><strong>Satnam Singh</strong><br />
&#8220;Declarative Programming Techniques for Many-Core Architectures&#8221; (<a href="/fp_seminar/singh-lava.flv">Download</a>) (<a href="/fp_seminar/2008-02-21-dsl-manycore1.pdf">Slides</a>)<br />
[See post to watch Flash video]</p>
]]></content:encoded>
			<wfw:commentRss>http://ulf.wiger.net/weblog/2008/02/29/satnam-singh-declarative-programming-techniques-for-many-core-architectures/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
