<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>@UHC</title>
	<atom:link href="http://utrechthaskellcompiler.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://utrechthaskellcompiler.wordpress.com</link>
	<description>News from Utrecht Haskell Compiler HQ</description>
	<lastBuildDate>Fri, 29 Oct 2010 10:47:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='utrechthaskellcompiler.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>@UHC</title>
		<link>http://utrechthaskellcompiler.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://utrechthaskellcompiler.wordpress.com/osd.xml" title="@UHC" />
	<atom:link rel='hub' href='http://utrechthaskellcompiler.wordpress.com/?pushpress=hub'/>
		<item>
		<title>A Haskell FFI calling convention for Javascript</title>
		<link>http://utrechthaskellcompiler.wordpress.com/2010/10/29/a-haskell-ffi-calling-convention-for-javascript/</link>
		<comments>http://utrechthaskellcompiler.wordpress.com/2010/10/29/a-haskell-ffi-calling-convention-for-javascript/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 10:47:35 +0000</pubDate>
		<dc:creator>Atze Dijkstra</dc:creator>
				<category><![CDATA[Compiler backend]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[UHC]]></category>
		<category><![CDATA[Utrecht Haskell Compiler]]></category>

		<guid isPermaLink="false">http://utrechthaskellcompiler.wordpress.com/?p=28</guid>
		<description><![CDATA[Haskell&#8217;s Foreign Function Interface (FFI) predefined calling conventions do not match well with Javascript&#8217;s object oriented features. In particular selecting a field of an object using dot notation (like o.f) and using an object as an array using brackets (like o[i]) do not have a natural counterpart in Haskell or the default calling conventions supported [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=utrechthaskellcompiler.wordpress.com&amp;blog=16836967&amp;post=28&amp;subd=utrechthaskellcompiler&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Haskell&#8217;s Foreign Function Interface (FFI) predefined calling conventions do not match well with Javascript&#8217;s object oriented features. In particular selecting a field of an object using dot notation (like <code>o.f</code>) and using an object as an array using brackets (like <code>o[i]</code>) do not have a natural counterpart in Haskell or the default calling conventions supported by the FFI interface. So, here are some examples of how Javascript is accessed in UHC via its <tt>jscript</tt> calling convention:
<p />
<pre>
data Document
foreign import jscript "document"   document      :: IO Document
foreign import jscript "%1.write()" documentWrite :: Document -&gt; JSString -&gt; IO ()
foreign import jscript alert :: JSString -&gt; IO ()
</pre>
<p />From within a browser the document representation can be accessed via the global variable <code>document</code>, the foreign entity <code>"document"</code> translates to a reference to this variable. The type of the document is defined as an opaque type, it can thus only manipulated via Javascript. Writing a string to the document is done by invoking the method <tt>write</tt> on a document. The foreign entity <code>"%1.write()"</code> specifies that from all arguments the first one is used as the receiver of the method <tt>write</tt>. The parenthesis <code>()</code> specify that a call has to be made, passing all arguments except those referred to explicitly by means of <code>%&lt;nr&gt;</code>, where <code>&lt;nr&gt; &gt;= 1</code> refers to argument <tt>&lt;nr&gt;</tt>. If an entity is omitted as in <tt>alert</tt> it defaults to <code>"&lt;functionname&gt;()"</code> where <code>&lt;functionname&gt;</code> is the name of the foreign function being defined.
<p />Function <tt>documentWrite</tt> does not accept a <tt>String</tt> but a <tt>JSString</tt> instead, defined to be the platform dependent representation of Strings, converted to and from <tt>String</tt> with corresponding conversion functions.
<p />
<pre>
type JSString = PackedString
stringToJSString :: String -&gt; JSString
jsStringToString :: JSString -&gt; String
</pre>
<p /><tt>stringToJSString</tt> forces its argument to be fully evaluated and then converts it to a Javascript String.
<p />There is choice whether to put <code>document</code> in the <tt>IO</tt> monad or not, depending whether this global object itself will ever be assigned a new value or not. Not being a Javascript DOM wizard wrapping in <tt>IO</tt> seems to be the safest bet.
<p />Given these functions a minimal Hello World web program thus is:
<p />
<pre>
main = alert $ stringToJSString "Hi there!"
</pre>
<p />As this would pop up an alert box, an alternative Hi is the following program which writes to the document instead:
<p />
<pre>
main = do d &lt;- document
          documentWrite d $ stringToJSString &quot;Hi there!&quot;
</pre>
<p />Actually, the usual Hello would have worked as well because it is implemented as writing to the document:
<p />
<pre>
main = putStr "Hi there!"
</pre>
<p />To show the usefulness of array like access as part of we do a bit of rudimentary DOM programming:
<p />
<pre>
foreign import jscript "%1.getElementsByName()" documentGetElementsByName :: Document -&gt; JSString -&gt; IO (NodeList Node)

data NodeList x

foreign import jscript "%1.length" nodeListLength :: NodeList Node -&gt; Int
foreign import jscript "%1[%2]"    nodeListItem   :: NodeList Node -&gt; Int -&gt; IO Node

data Node

foreign import jscript "%1.innerHTML" elementInnerHTML :: Node -&gt; JSString
foreign import jscript "%1.tagName"   elementTagName   :: Node -&gt; JSString
</pre>
<p />A <tt>NodeList</tt> is not an array, but behaves like an array: we can ask for its length and retrieve an element by index. It is not an array itself, so modelling it as such in Haskell would be incorrect. However, by allowing import entities to use Javascript array notation we circumvent this limitation and the Javascript array interface can still be used easily.
<p />Finally, this minimal interface to DOM can be used to retrieve and print info about an element in an html document:
<p />
<pre>
main = do d &lt;- document
          nl &lt;- documentGetElementsByName d (stringToJSString &quot;myHeader&quot;)
          print (nodeListLength nl)
          n &lt;- nodeListItem nl 0
          print $ jsStringToString $ elementTagName n
          print $ jsStringToString $ elementInnerHTML n
</pre>
<p />Given the presence of
<p />
<pre>
<h1>Head says hello!</h1>
</pre>
<p />with the name <tt>"myHeader"</tt> in the document where the program is run, it will produce the following as part of the document:
<p />
<pre>
1 "H1" "Head says hello!"
</pre>
<p />
<p />
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/utrechthaskellcompiler.wordpress.com/28/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/utrechthaskellcompiler.wordpress.com/28/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/utrechthaskellcompiler.wordpress.com/28/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=utrechthaskellcompiler.wordpress.com&amp;blog=16836967&amp;post=28&amp;subd=utrechthaskellcompiler&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://utrechthaskellcompiler.wordpress.com/2010/10/29/a-haskell-ffi-calling-convention-for-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d97bc3163c06d0b2a1ec5c530ca656e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atzedijkstra</media:title>
		</media:content>
	</item>
		<item>
		<title>Haskell to Javascript backend</title>
		<link>http://utrechthaskellcompiler.wordpress.com/2010/10/18/haskell-to-javascript-backend/</link>
		<comments>http://utrechthaskellcompiler.wordpress.com/2010/10/18/haskell-to-javascript-backend/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 09:16:25 +0000</pubDate>
		<dc:creator>Atze Dijkstra</dc:creator>
				<category><![CDATA[Compiler backend]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[UHC]]></category>
		<category><![CDATA[Utrecht Haskell Compiler]]></category>

		<guid isPermaLink="false">http://utrechthaskellcompiler.wordpress.com/?p=5</guid>
		<description><![CDATA[My first blog ever, and for a Haskell oriented blog a Javascript flavored topic seemed to be a good start . I intend to spend time on my UHC adventures: internals, problems, solutions, open questions, etc etc. As I have been working on a Javascript backend for UHC it thus fits quite well here. I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=utrechthaskellcompiler.wordpress.com&amp;blog=16836967&amp;post=5&amp;subd=utrechthaskellcompiler&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My first blog ever, and for a Haskell oriented blog a Javascript flavored topic seemed to be a good start <tt> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </tt>. I intend to spend time on my UHC adventures: internals, problems, solutions, open questions, etc etc. As I have been working on a Javascript backend for UHC it thus fits quite well here.
<p />I started making a Javascript backend after ICFP 2010. A couple of people I spoke to at the ICFP (and already before) had expressed it would be a good idea to do so. There seem to be various attempts to do something functional with Javascript, either as a Haskell compiler backend (<a href="http://www.haskell.org/haskellwiki/Yhc/Javascript">YHC</a>), or as a library (<a href="http://osteele.com/sources/javascript/functional/">Functional Javascript</a>), or as a Haskell interpreter written in Javascript (<a href="http://github.com/johang88/haskellinjavascript">haskellinjavascript</a>). Regretfully, none of these seem to be either alive or mature. Perhaps there is more.
<p />For this entry, I&#8217;ll explain the interpreter for which code is generated, and how it interacts with Javascript. To make it into a full Haskell to Javascript compiler more than that is required, but I&#8217;ll go into the issues and todos in a followup blog entry.
<p />
<h1> Javascript interpreter</h1>
<p>Functional programming in Haskell (obviously) is about <em>functions</em>, lazy <em>applications</em> of those functions, and forcing <em>evaluation</em> when we are interested in the actual computed value of applications. So those are the three ingredients modeled by objects in Javascript. A function <tt>Fun</tt> object is constructed given a Javascript function <tt>fun</tt>, and can be applied to arbitrary Javascript values:
<p />
<pre>

function Fun( fun ) { ...
}

Fun.prototype = {
    applyN : function ( args ) ...
    needsNrArgs : function() ...
}
</pre>
<p />The main difference between strict and lazy functional languages is that the delay of a an actual computation must be represented explicitly, usually this is done by remembering the not yet applied function and its arguments (a closure, thunk). Here a Javascript apply object is used, in two variations, one for undersaturated function applications still lacking a known number of arguments (<tt>AppLT</tt>), and one for the applications of which we do not know under-, over-, or exactly right saturation (<tt>App</tt>):
<p />
<pre>
AppLT.prototype = {
    applyN : function ( args ) ...
    needsNrArgs : function() ...
}

function AppLT( fun, args ) { ...
}

App.prototype = {
    applyN : function ( args ) ...
}

function App( fun, args ) { ...
}
</pre>
<p />The last ingredient is a function <tt>eval</tt>, necessary to force evaluation of an application:
<p />
<pre>
function eval( x ) ...
</pre>
<p />So, let&#8217;s look at these in more detail, beginning with arbitrary, lazy, application. A design choice is to be able to arbitrarily mix Javascript values and interpreter values like evaluated and not yet evaluated applications. In order to distinguish these, the interpreter maintained values have a field <tt>eOrV</tt>, short for &#8220;evaluator or value&#8221;, which either holds a Javascript function to <em>evaluate</em> a not yet evaluated application, or the resulting <em>value</em> of this computation:
<p />
<pre>

function App( fun, args ) {
    this.eOrV = function() {
        var x = ( fun.applyN( args ) ) ;
        this.eOrV = x ;
        return x ;
    }
}
</pre>
<p />The above constructor for an application takes a function and its arguments. The function <tt>fun</tt> can be a <tt>Fun</tt>, <tt>AppLT</tt>, or another <tt>App</tt>, the arguments <tt>args</tt> are represented by a Javascript <tt>Array</tt> holding arbitrary values. The <tt>App</tt> construction piggybacks on Javascript closures by building a parameterless Javascript function to force evaluation. This function is put in the <tt>eOrV</tt> field, which itself is overwritten when invoked: long live untyped interpreted languages <tt> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </tt>! An <tt>App</tt> thus represents closures; forcing an <tt>App</tt> to evaluate (to WHNF) is done by the following (yet incorrect version of) <tt>eval</tt>:
<p />
<pre>

// Incorrect version of eval:
function eval( x ) {
    if ( typeof x.eOrV == 'function' ) {
        x = x.eOrV() ;
    } else if ( x.eOrV ) {
        x = x.eOrV ;
    }
    return x ;
}
</pre>
<p />This not yet correct version of <tt>eval</tt> (two reasons why..) inspects the <tt>eOrV</tt> field. If a function, it simply invokes it, if not, it returns the value. Internally, <tt>applyN</tt> is used to actually (i.e. strictly) do the application. Each of the objects used by the interpreter knows how to deal with this. For an <tt>App</tt> we first need to evaluate the <tt>App</tt> closure (i.e. compute the delayed application), then apply it directly to the newly given arguments. However, we do not do the last part directly as this may lead us into too deep recursion, in particular tail recursion! Instead a new anonymous Javascript object is returned holding as its only field the function which will do this, thus allowing to return and free some of the Javascript stack:
<p />
<pre>

App.prototype = {
    applyN : function ( args ) {
        var fun = eval(this) ;
        return {
            eOrV : function() {
                return fun.applyN( args ) ;
            } } ;
    }
}
</pre>
<p />It now has become the responsibility of the caller of <tt>applyN</tt> to continue with the evaluation, in our case the <tt>eval</tt> function. The <tt>eval</tt> function has to repeatedly test whether still progress can be made, the correct version is as follows:
<p />
<pre>
function eval( x ) {
    while ( x &amp;&amp; x.eOrV ) {
        if ( typeof x.eOrV == 'function' ) {
            x = x.eOrV() ;
        } else {
            x = x.eOrV ;
        }
    }
    return x ;
}
</pre>
<p />Additionally it also checks whether <tt>x</tt> and <tt>x.eOrV</tt> are defined before actually using them. Plain Javascript values pass unmodified through <tt>eval</tt>, thus allowing interpreter and Javascript values to coexist.
<p />When <tt>applyN</tt> is invoked on an <tt>App</tt> it actually does not much more than delegate the real work to <tt>Fun</tt> and <tt>AppLT</tt>, which both deal with application by consuming the right amount of arguments to achieve a saturated function call. A <tt>Fun</tt> knows how many arguments it requires, this can be extracted from Javascript function objects:
<p />
<pre>

function Fun( fun ) {
    this.needs = fun.length ;
    this.fun = fun ;
}
</pre>
<p />When <tt>applyN</tt> is invoked on a <tt>Fun</tt> with too few arguments, an <tt>AppLT</tt> is constructed, thus remembering the partial unsaturated application. When given exactly enough it just calls the function, and when given more arguments than required, it slices off the right amount of arguments for calling the function, and then continues in the same way as <tt>App</tt> did by returning a Javascript continuation object for the remainder of the application.
<p />
<pre>
Fun.prototype = {
    applyN : function ( args ) {
        if ( args.length &lt; this.needs ) {
            return new AppLT( this, args ) ;
        } else if ( args.length == this.needs ) {
            var x = this.fun.apply( null, args ) ;
            return x ;
        } else {
            var fun = eval( this.fun.apply( null, args.slice( 0, this.needs ) ) ) ;
            var remargs = args.slice( this.needs ) ;
            return {
                eOrV : function() {
                    return fun.applyN( remargs ) ;
                } } ;
        }
    } ,
    needsNrArgs : function() {
        return this.needs ;
    } ,
}
</pre>
<p />Finally, undersaturated applications are encoded with <tt>AppLT</tt> objects. Its implementation resembles <tt>App</tt> and <tt>Fun</tt>, so the code is just here for completeness:
<p />
<pre>
AppLT.prototype = {
    applyN : function ( args ) {
        var needs = this.needsNrArgs() ;
        if ( args.length &lt; needs ) {
            return new AppLT( this, args ) ;
        } else if ( args.length == needs ) {
            return this.fun.applyN( this.args.concat( args ) ) ;
        } else {
            var fun = eval( this.applyN( args.slice( 0, needs ) ) ) ;
            return {
                eOrV : function() {
                    return fun.applyN( args.slice( needs ) ) ;
                } } ;
        }
    } ,
    needsNrArgs : function() {
        return this.fun.needsNrArgs() - this.args.length ;
    } ,
}
function AppLT( fun, args ) {
    this.fun = fun ;
    this.args = args ;
}
</pre>
<p />This is it! We can now do some real Haskell programming, although it is still manual labor.
<p />
<h1> Using the interpreter</h1>
<p />As an example, a version of the primes sieve is used:
<p />
<pre>

-- Haskell version
module Sieve where

notMultiple x y = not ((y `div` x) * x == y)
sieve (h:t) = h : sieve (filter (notMultiple h) t)

main :: IO ()
main = putStrLn (show (last (take 500 (sieve [2..]))))
</pre>
<p />Without a <tt>Prelude</tt> all functions have to be manually encoded, for example with the aid of helper function <tt>fun</tt> multiplication is defined as follows:
<p />
<pre>
function fun(f) { return new Fun(f) ; }

var mul = fun( function(a,b) {
    return eval(a) * eval(b) ;
} ) ;
</pre>
<p />Multiplication is a primitive and requires its operands to be evaluated.
<p />For manipulating lazy lists a couple of additional helper functions come in handy:
<p />
<pre>
function app1(f,a  ) { return new App(f,[a  ]) ; }
function app2(f,a,b) { return new App(f,[a,b]) ; }

function eval1(f,a  ) { return eval( f.applyN([a  ]) ) ; }
function eval2(f,a,b) { return eval( f.applyN([a,b]) ) ; }
</pre>
<p /><tt>app1</tt> (and variants) construct lazy application nodes, <tt>eval1</tt> (and variants) apply arguments and enforce evaluation.
<p />Lists are encoded as arrays, with a tag in front:
<p />
<pre>

function cons(x,y) { return [0,x,y]   ; }
var nil = [1] ;
function head(l)   { return l[1]      ; }
function tail(l)   { return l[2]      ; }
function isNil(x)  { return x[0] == 1 ; }
</pre>
<p />The above functions already assume that their arguments are already evaluated. With these functions <tt>filter</tt> can now be implemented:
<p />
<pre>
var filter = fun( function(a,b) {
	var list = eval(b) ;
	var test = eval1( a, head(list) ) ;
	if ( test ) {
		return cons( head(list), app2( filter, a, tail(list) ) ) ;
	} else {
		return app2( filter, a, tail(list) ) ;
	}
} ) ;
</pre>
<p />The equivalent of the infinite lazy list <code>[a..]</code> is the function <tt>from</tt>:
<p />
<pre>
var from = fun( function(a) {
    return cons( a, app1( from, app2( add, a, 1 ) ) ) ;
} ) ;
</pre>
<p />Other function definitions are &#8216;just like that&#8217;, i.e. predictably follow the same ideas. We then end with the equivalent of <tt>sieve</tt> and its application:
<p />
<pre>

var sieve = fun( function(a) {
    var list = eval(a) ;
    return cons( head(list)
               , app1( sieve
                     , app2( filter
                           , app1( notMultiple2, head(list) )
                           , tail(list)
               )     )     ) ;
} ) ;

var mainSieve = app2( take, 500, app1( sieve, app1( from, 2 ) ) ) ;
</pre>
<p />Finally, we just show the last element:
<p />
<pre>
function show( x ) {
    var x = eval(x) ;
    document.write( eval(x) ) ;
}

show( app1( last, mainSieve ) ) ;
</pre>
<p />So, is this is all there is to functional programming in Javascript? Regretfully not, as a Haskell compiler needs to deal with foreign function interfaces in general, libraries, deployment, IO interfacing, etc etc. But that is for the next blog entry&#8230;
<p />In the meantime the source code for this entry can be found on <code>git@github.com:atzedijkstra/javascript-runtime-for-UHC.git</code>
<p />
<p />
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/utrechthaskellcompiler.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/utrechthaskellcompiler.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/utrechthaskellcompiler.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=utrechthaskellcompiler.wordpress.com&amp;blog=16836967&amp;post=5&amp;subd=utrechthaskellcompiler&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://utrechthaskellcompiler.wordpress.com/2010/10/18/haskell-to-javascript-backend/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1d97bc3163c06d0b2a1ec5c530ca656e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">atzedijkstra</media:title>
		</media:content>
	</item>
	</channel>
</rss>
