<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Optimus Prime</title>
    <link>http://optimusprime.posterous.com</link>
    <description>(These posts are merely notes. Please do not take them as official releases.)</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#bc43f1fd0" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OptimusPrime" /><feedburner:info uri="optimusprime" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Thu, 02 Jun 2011 01:53:46 -0700</pubDate>
      <title>Application have closed for the PLASMA summer internship.</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/0CWR39cVd_Y/application-have-closed-for-the-plasma-summer</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/application-have-closed-for-the-plasma-summer</guid>
      <description>&lt;p&gt;
	We may have to interview and will inform candidate accordingly. We will be making a decision over the next week.
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/application-have-closed-for-the-plasma-summer"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/application-have-closed-for-the-plasma-summer#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/0CWR39cVd_Y" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/application-have-closed-for-the-plasma-summer</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 10 May 2011 12:58:00 -0700</pubDate>
      <title>Summer Internship with PLASMA</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/Jz4Wz6ZheWU/summer-internship-with-plasma</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/summer-internship-with-plasma</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Apparently &lt;a href="http://lscits.cs.bris.ac.uk/"&gt;LSCITS&lt;/a&gt; has money set aside to fund a few summer internships mentored by the postgraduate researchers. As a man of many ideas but little time, seems like a good opportunity to get some things implemented.&lt;/p&gt;

&lt;p&gt;I have one concrete proposal, outlined below. Feel free to suggest your own ideas too, as long as they&amp;rsquo;re within my field of interest.&lt;/p&gt;

&lt;p&gt;Interns will be paid at a rate of £250 per week. You will likely be invited to present your results at the next LSCITS Symposium, to be held in London during the first week of November.&lt;/p&gt;

&lt;h2&gt;An F-lite to MicroBlaze compiler&lt;/h2&gt;

&lt;p&gt;When discussing the &lt;a href="http://www.cs.york.ac.uk/fp/reduceron/"&gt;Reduceron&amp;rsquo;s&lt;/a&gt; performance, we tend to compare it to the execution of the equivalent program compiled in GHC on an x86 architecture. This isn&amp;rsquo;t entirely fair given that x86 exists in fixed silicon and clocks several times higher than the Reduceron&amp;rsquo;s FPGA implementation.&lt;/p&gt;

&lt;p&gt;A better comparison may be to something like the &lt;a href="http://en.wikipedia.org/wiki/MicroBlaze"&gt;MicroBlaze Soft Processor&lt;/a&gt;, a traditional processor architecture implemented on a Xilinx FPGA. In order to make this comparison, a compiler from F-lite to MicroBlaze instructions is required.&lt;/p&gt;

&lt;p&gt;There are a number of possible approaches;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using the &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; intermediate language and tool chain. It can target MicroBlaze baremetal and has been used &lt;a href="http://www.cse.unsw.edu.au/~pls/thesis/davidt-thesis.pdf"&gt;very effectively&lt;/a&gt; in the latest versions of GHC.&lt;/li&gt;
&lt;li&gt;Find ways to execute GHC compiled code, baremetal, on MicroBlaze.&lt;/li&gt;
&lt;li&gt;Update and optimise the F-lite to C compiler.&lt;/li&gt;
&lt;li&gt;Using similar functional language to C compiler.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;em&gt;Time estimate: 7 &amp;ndash; 8 weeks.&lt;/em&gt;
&lt;em&gt;Recommend familiarity or even just a passing interest in functional programming, functional language implementations and/or low-level programming. Experience with MicroBlaze architecture is a bonus.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Application&lt;/h2&gt;

&lt;p&gt;If you are interested and are planning to spend the summer in York, please e-mail me at &lt;a href="mailto:firstname@cs.york.ac.uk"&gt;firstname@cs.york.ac.uk&lt;/a&gt; by the &lt;strong&gt;Tuesday Week 6, 31st May&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I would like to know;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your thoughts on the project and how you would approach it.&lt;/li&gt;
&lt;li&gt;What related experience you have either academically (CGO, FUN, EDI, EMS, e.t.c.) or in other work.&lt;/li&gt;
&lt;li&gt;What dates you plan to be available to work.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Depending on a multitude of variables, I may arrange for you to come in and have a further chat.&lt;/p&gt;

&lt;h2&gt;Eligibility&lt;/h2&gt;

&lt;p&gt;Applicants must;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;be a &amp;ldquo;middle years&amp;rdquo; student. i.e. 2nd to 3rd year or 3rd to 4th year.&lt;/li&gt;
&lt;li&gt;satisfy the EPSRC&amp;rsquo;s residency rules.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;More information on eligibility can be found at;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.epsrc.ac.uk/funding/students/Pages/vacationbursaries.aspx"&gt;http://www.epsrc.ac.uk/funding/students/Pages/vacationbursaries.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.epsrc.ac.uk/funding/students/Pages/eligibility.aspx"&gt;http://www.epsrc.ac.uk/funding/students/Pages/eligibility.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Other LSCITS interships&lt;/h2&gt;

&lt;p&gt;I&amp;rsquo;m not the only one offering an LSCITS internship.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.louismrose.me.uk/"&gt;Louis Rose&lt;/a&gt; is offering an &amp;ldquo;Enterprise Systems Internship: Hone your programming and research skills by developing simulations for the cloud.&amp;rdquo; Find out more at &lt;a href="http://www.louismrose.me.uk/internship"&gt;http://www.louismrose.me.uk/internship&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/summer-internship-with-plasma"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/summer-internship-with-plasma#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/Jz4Wz6ZheWU" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/summer-internship-with-plasma</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 08 May 2011 06:06:19 -0700</pubDate>
      <title>Google Code Jam 2011</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/knnDax2c7xM/google-code-jam-2011</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/google-code-jam-2011</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I didn&amp;rsquo;t quite get my efficient solution for qualification problem C done in time for the &lt;a href="http://code.google.com/codejam/"&gt;competition&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I might start earlier next time.&lt;/p&gt;

&lt;p&gt;&lt;div class="data type-haskell"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;span rel="#L31" id="L31"&gt;31&lt;/span&gt;
&lt;span rel="#L32" id="L32"&gt;32&lt;/span&gt;
&lt;span rel="#L33" id="L33"&gt;33&lt;/span&gt;
&lt;span rel="#L34" id="L34"&gt;34&lt;/span&gt;
&lt;span rel="#L35" id="L35"&gt;35&lt;/span&gt;
&lt;span rel="#L36" id="L36"&gt;36&lt;/span&gt;
&lt;span rel="#L37" id="L37"&gt;37&lt;/span&gt;
&lt;span rel="#L38" id="L38"&gt;38&lt;/span&gt;
&lt;span rel="#L39" id="L39"&gt;39&lt;/span&gt;
&lt;span rel="#L40" id="L40"&gt;40&lt;/span&gt;
&lt;span rel="#L41" id="L41"&gt;41&lt;/span&gt;
&lt;span rel="#L42" id="L42"&gt;42&lt;/span&gt;
&lt;span rel="#L43" id="L43"&gt;43&lt;/span&gt;
&lt;span rel="#L44" id="L44"&gt;44&lt;/span&gt;
&lt;span rel="#L45" id="L45"&gt;45&lt;/span&gt;
&lt;span rel="#L46" id="L46"&gt;46&lt;/span&gt;
&lt;span rel="#L47" id="L47"&gt;47&lt;/span&gt;
&lt;span rel="#L48" id="L48"&gt;48&lt;/span&gt;
&lt;span rel="#L49" id="L49"&gt;49&lt;/span&gt;
&lt;span rel="#L50" id="L50"&gt;50&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Control.Arrow&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Control.Monad&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="c1"&gt;-- Using ByteString a little superfluously but thought my parser might slow me down.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="k"&gt;qualified&lt;/span&gt; &lt;span class="nn"&gt;Data.ByteString.Lazy.Char8&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;QS&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Data.Bits&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Data.List&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Data.Maybe&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Data.Word&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="c1"&gt;-- | A bag of sweeties is a list of unsigned integers&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;Word32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="c1"&gt;-- | Given a bag of sweeties, I want to split it into two piles, calculating&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="c1"&gt;-- how much Sean&amp;#39;s is worth actually and how much patrick thinks each one is&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="c1"&gt;-- worth. `choices` gives these for all possible subsets of a bag.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="nf"&gt;choices&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="kt"&gt;Word32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Word32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Word32&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="nf"&gt;choices&lt;/span&gt; &lt;span class="kt"&gt;[]&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;span class="nf"&gt;choices&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="kt"&gt;:&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sval_real&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pval&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sval&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="ow"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;flg&lt;/span&gt; &lt;span class="ow"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;False&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt; &lt;span class="n"&gt;flg&lt;/span&gt; &lt;span class="kr"&gt;then&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;sval_real&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pval&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sval&lt;/span&gt; &lt;span class="p"&gt;`&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;`&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="kr"&gt;else&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sval_real&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pval&lt;/span&gt; &lt;span class="p"&gt;`&lt;/span&gt;&lt;span class="n"&gt;xor&lt;/span&gt;&lt;span class="p"&gt;`&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sval&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="c1"&gt;-- | Is it possible to keep Patrick from crying?&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="nf"&gt;check&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="nf"&gt;check&lt;/span&gt; &lt;span class="n"&gt;bag&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;foldr&lt;/span&gt; &lt;span class="n"&gt;xor&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;bag&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Just&lt;/span&gt; &lt;span class="n"&gt;bag&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;otherwise&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Nothing&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&lt;span class="c1"&gt;-- | What is the first solution for which Patrick isn&amp;#39;t going to cry?&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&lt;span class="nf"&gt;solve&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="kt"&gt;Word32&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&lt;span class="nf"&gt;solve&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;listToMaybe&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="n"&gt;fst&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uncurry&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;snd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;tail&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;init&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&lt;span class="nf"&gt;combine&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&lt;span class="nf"&gt;combine&lt;/span&gt; &lt;span class="kt"&gt;[]&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;[]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&lt;span class="nf"&gt;combine&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="kt"&gt;:&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="kt"&gt;:&lt;/span&gt;&lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:&lt;/span&gt; &lt;span class="n"&gt;combine&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="nf"&gt;parseLine&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;ByteString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kt"&gt;ByteString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Bag&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;span class="nf"&gt;parseLine&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sweeties&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sort&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fromInteger&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;maybe&lt;/span&gt; &lt;span class="n"&gt;undefined&lt;/span&gt; &lt;span class="n"&gt;fst&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readInteger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC40"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;take&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maybe&lt;/span&gt; &lt;span class="n"&gt;undefined&lt;/span&gt; &lt;span class="n"&gt;fst&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readInt&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="n"&gt;sweeties&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&lt;span class="c1"&gt;-- | Lazy interaction says it will apply a function from strings to strings on&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;span class="c1"&gt;-- an input, returning the output. So... given a input stream, split it up into&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="c1"&gt;-- lines, chop the top of and pair up lines that relate to the same test-case.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="c1"&gt;-- Add a test-case index, parse each line and then check and solve it. Display&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&lt;span class="c1"&gt;-- the output for each test-case and then merge into one output stream.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;span class="nf"&gt;main&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interact&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unlines&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC48"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;solve&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;parseLine&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC49"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;zip&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;combine&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;tail&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;display&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;QS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt; &lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Case #&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;: &amp;quot;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="n"&gt;maybe&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;NO&amp;quot;&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/google-code-jam-2011"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/google-code-jam-2011#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/knnDax2c7xM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/google-code-jam-2011</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 18 Jan 2011 16:04:10 -0800</pubDate>
      <title>Building Agda inside a Capri sandbox</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/_HfE39Uw58M/building-agda-inside-a-capri-sandbox</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/building-agda-inside-a-capri-sandbox</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I regularly hit Cabal dependency hell. Every few months (sometimes weeks) I&amp;rsquo;ve got to throw away my Cabal packages and start again. Well no more! I hope that by sandboxing some of the more agitated packages, maybe I won&amp;rsquo;t hit that same problem. As a first year student said to me, you &amp;ldquo;put the rabbits in cages for spring approach.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;Everything went to pot when I tried to install a dev version of Agda today, so it seemed like it was a sensible time to try the theory. I&amp;rsquo;m using the &lt;a href="http://www.haskell.org/haskellwiki/Capri"&gt;capri&lt;/a&gt; tool to handle the sandboxing. I tried &lt;a href="http://corp.galois.com/blog/2010/12/20/cabal-dev-sandboxed-development-builds-for-haskell.html"&gt;cabal-dev&lt;/a&gt; too but capri seemed to help me find the solution more easily.&lt;/p&gt;

&lt;p&gt;Please note that the attached script isn&amp;rsquo;t so much a script. More of a guide.&lt;/p&gt;

&lt;p&gt;&lt;div class="data type-shell"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;span rel="#L31" id="L31"&gt;31&lt;/span&gt;
&lt;span rel="#L32" id="L32"&gt;32&lt;/span&gt;
&lt;span rel="#L33" id="L33"&gt;33&lt;/span&gt;
&lt;span rel="#L34" id="L34"&gt;34&lt;/span&gt;
&lt;span rel="#L35" id="L35"&gt;35&lt;/span&gt;
&lt;span rel="#L36" id="L36"&gt;36&lt;/span&gt;
&lt;span rel="#L37" id="L37"&gt;37&lt;/span&gt;
&lt;span rel="#L38" id="L38"&gt;38&lt;/span&gt;
&lt;span rel="#L39" id="L39"&gt;39&lt;/span&gt;
&lt;span rel="#L40" id="L40"&gt;40&lt;/span&gt;
&lt;span rel="#L41" id="L41"&gt;41&lt;/span&gt;
&lt;span rel="#L42" id="L42"&gt;42&lt;/span&gt;
&lt;span rel="#L43" id="L43"&gt;43&lt;/span&gt;
&lt;span rel="#L44" id="L44"&gt;44&lt;/span&gt;
&lt;span rel="#L45" id="L45"&gt;45&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="c"&gt;# Install the capri sandboxing tool.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;cabal install capri&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="c"&gt;# Download Agda to a directory of your choice.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;darcs get --lazy &lt;span class="s2"&gt;&amp;quot;http://code.haskell.org/Agda&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c"&gt;# Enter the directory. Make sure you `cabal clean` if you&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="c"&gt;# try this more than once.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Agda&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="c"&gt;# Get in the initial packages.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;capri bootstrap&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="c"&gt;# And some extras required to register the ghc package.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;capri clone array bytestring containers filepath old-locale&lt;/div&gt;&lt;div class="line" id="LC16"&gt;capri clone old-time unix directory hpc process pretty &lt;/div&gt;&lt;div class="line" id="LC17"&gt;capri clone template-haskell syb&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c"&gt;# For some reason, `capri clone` doesn&amp;#39;t work with Cabal so&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="c"&gt;# you&amp;#39;ve got to do it manually. Locate your package.conf.d&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="c"&gt;# directory using `ghc-pkg list` and use tab completion to&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;span class="c"&gt;# find the appropriate Cabal file. In my case...&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;capri ghc-pkg -- register /usr/local/pkg/ghc-6.12.1-i686-1/&lt;span class="se"&gt;\&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;lib/ghc-6.12.1/package.conf.d/&lt;span class="se"&gt;\&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;Cabal-1.8.0.2-bc92fe595a99db06fca8c2eb712108b4.conf&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;span class="c"&gt;# Now we can finish cloning ghc.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;capri clone ghc-binary bin-package-db ghc&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&lt;span class="c"&gt;# Easier to install a fresh version of haskell98.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;capri cabal -- install haskell98-1.0.1.1&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&lt;span class="c"&gt;# Install the actual package.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;capri install&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="c"&gt;# Link the capri build of `agda-mode` into your path.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;ln -s &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/.capri/install/bin/agda-mode ~/.cabal/bin/agda-mode&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="c"&gt;# Setup your .emacs using their tool.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;agda-mode setup&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&lt;span class="c"&gt;# Finally whenever you run emacs, make sure you use the&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;span class="c"&gt;# right environment by doing...&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GHC_PACKAGE_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;/.capri/packages&lt;/div&gt;&lt;div class="line" id="LC45"&gt;emacs&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/building-agda-inside-a-capri-sandbox"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/building-agda-inside-a-capri-sandbox#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/_HfE39Uw58M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/building-agda-inside-a-capri-sandbox</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 28 Dec 2010 10:20:00 -0800</pubDate>
      <title>More heresy</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/62bsGmffaPY/more-heresy</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/more-heresy</guid>
      <description>&lt;p&gt;
	&lt;p&gt;In case anyone was wondering, this rampage was born out of a stackoverflow&amp;nbsp;question.&lt;/p&gt;
&lt;div&gt;
&lt;blockquote&gt;&lt;a href="http://stackoverflow.com/questions/4521996/how-can-i-specify-that-two-operations-commute-in-a-typeclass"&gt;"How can I specify that two operations commute in a&amp;nbsp;typeclass [in Haskell]?"&lt;/a&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;My answer at the time was "no, because..." but I feel now I can confidently say "you wouldn't want to but there are some ways you can cheat the effect."&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;But seriously kids, don't do this at home. Use&amp;nbsp;&lt;a href="http://wiki.portal.chalmers.se/agda/pmwiki.php"&gt;Agda&lt;/a&gt;.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;div class="data type-haskell"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;span rel="#L31" id="L31"&gt;31&lt;/span&gt;
&lt;span rel="#L32" id="L32"&gt;32&lt;/span&gt;
&lt;span rel="#L33" id="L33"&gt;33&lt;/span&gt;
&lt;span rel="#L34" id="L34"&gt;34&lt;/span&gt;
&lt;span rel="#L35" id="L35"&gt;35&lt;/span&gt;
&lt;span rel="#L36" id="L36"&gt;36&lt;/span&gt;
&lt;span rel="#L37" id="L37"&gt;37&lt;/span&gt;
&lt;span rel="#L38" id="L38"&gt;38&lt;/span&gt;
&lt;span rel="#L39" id="L39"&gt;39&lt;/span&gt;
&lt;span rel="#L40" id="L40"&gt;40&lt;/span&gt;
&lt;span rel="#L41" id="L41"&gt;41&lt;/span&gt;
&lt;span rel="#L42" id="L42"&gt;42&lt;/span&gt;
&lt;span rel="#L43" id="L43"&gt;43&lt;/span&gt;
&lt;span rel="#L44" id="L44"&gt;44&lt;/span&gt;
&lt;span rel="#L45" id="L45"&gt;45&lt;/span&gt;
&lt;span rel="#L46" id="L46"&gt;46&lt;/span&gt;
&lt;span rel="#L47" id="L47"&gt;47&lt;/span&gt;
&lt;span rel="#L48" id="L48"&gt;48&lt;/span&gt;
&lt;span rel="#L49" id="L49"&gt;49&lt;/span&gt;
&lt;span rel="#L50" id="L50"&gt;50&lt;/span&gt;
&lt;span rel="#L51" id="L51"&gt;51&lt;/span&gt;
&lt;span rel="#L52" id="L52"&gt;52&lt;/span&gt;
&lt;span rel="#L53" id="L53"&gt;53&lt;/span&gt;
&lt;span rel="#L54" id="L54"&gt;54&lt;/span&gt;
&lt;span rel="#L55" id="L55"&gt;55&lt;/span&gt;
&lt;span rel="#L56" id="L56"&gt;56&lt;/span&gt;
&lt;span rel="#L57" id="L57"&gt;57&lt;/span&gt;
&lt;span rel="#L58" id="L58"&gt;58&lt;/span&gt;
&lt;span rel="#L59" id="L59"&gt;59&lt;/span&gt;
&lt;span rel="#L60" id="L60"&gt;60&lt;/span&gt;
&lt;span rel="#L61" id="L61"&gt;61&lt;/span&gt;
&lt;span rel="#L62" id="L62"&gt;62&lt;/span&gt;
&lt;span rel="#L63" id="L63"&gt;63&lt;/span&gt;
&lt;span rel="#L64" id="L64"&gt;64&lt;/span&gt;
&lt;span rel="#L65" id="L65"&gt;65&lt;/span&gt;
&lt;span rel="#L66" id="L66"&gt;66&lt;/span&gt;
&lt;span rel="#L67" id="L67"&gt;67&lt;/span&gt;
&lt;span rel="#L68" id="L68"&gt;68&lt;/span&gt;
&lt;span rel="#L69" id="L69"&gt;69&lt;/span&gt;
&lt;span rel="#L70" id="L70"&gt;70&lt;/span&gt;
&lt;span rel="#L71" id="L71"&gt;71&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cm"&gt;{-&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="cm"&gt;Uses the She (Stathclyde Haskell Enhancement), which you&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="cm"&gt;can get from http://bit.ly/gaVM8X.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="cm"&gt;-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="cm"&gt;{-# OPTIONS_GHC -Wall -F -pgmF she #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="cm"&gt;{-# LANGUAGE GADTs, KindSignatures #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="cm"&gt;{-# LANGUAGE TypeFamilies, TypeOperators #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="cm"&gt;{-# LANGUAGE RankNTypes, FlexibleContexts #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="cm"&gt;{-# LANGUAGE MultiParamTypeClasses, NoImplicitPrelude #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;Monoid&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ShePrelude&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;span class="c1"&gt;-- | Theory of equivalence&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;:=:&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;-- | Proof of equivalence&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Refl&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;span class="c1"&gt;-- | Congruence proof&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="nf"&gt;cong&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="nf"&gt;cong&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="c1"&gt;-------------&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="c1"&gt;-- | Monoid ops, include laws on type-level equivalents&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;Monoid&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mempty&lt;/span&gt;  &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mappend&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;midentl&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MEmpty&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;midentr&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MEmpty&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;massoc&lt;/span&gt;  &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;zs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&lt;span class="c1"&gt;-- | Sigs for type-level equivalents&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="kt"&gt;MEmpty&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;span class="c1"&gt;-------------&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Nil&lt;/span&gt;  &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Monoid&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mempty&lt;/span&gt;  &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mappend&lt;/span&gt; &lt;span class="kt"&gt;Nil&lt;/span&gt;         &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mappend&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mappend&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC50"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;midentl&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC52"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;midentr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;midentr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;midentr&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;massoc&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;        &lt;span class="kr"&gt;_&lt;/span&gt;    &lt;span class="kr"&gt;_&lt;/span&gt;   &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;massoc&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;massoc&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;MEmpty&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;MAppend&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="cm"&gt;{- All this will be derived automatically one day. -}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;dummy&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;SheWitNil&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;SheWitCons&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt;  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SheWitNil&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt;  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SheWitCons&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/more-heresy"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/more-heresy#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/62bsGmffaPY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/more-heresy</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 27 Dec 2010 16:12:00 -0800</pubDate>
      <title>Proofs in Haskell + exts + She</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/aQaBUog3c6M/proofs-in-haskell-exts-she</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/proofs-in-haskell-exts-she</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Was waiting for the girlfriend's family to arrive today and thought it might be Fun (capital F) to have a play with&amp;nbsp;&lt;a href="http://personal.cis.strath.ac.uk/~conor/pub/she/"&gt;She&lt;/a&gt;&amp;nbsp;(Strathclyde Haskell Enhancement). Now I know it isn't proper DTP and Agda/Coq/Epigram/e.t.c. have all kinds of constraints that GHC Haskell doesn't to keep proofs sound. But hey, what's a little heresy between friends?&lt;/p&gt;
&lt;p /&gt;
&lt;div&gt;&lt;div class="data type-haskell"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;span rel="#L31" id="L31"&gt;31&lt;/span&gt;
&lt;span rel="#L32" id="L32"&gt;32&lt;/span&gt;
&lt;span rel="#L33" id="L33"&gt;33&lt;/span&gt;
&lt;span rel="#L34" id="L34"&gt;34&lt;/span&gt;
&lt;span rel="#L35" id="L35"&gt;35&lt;/span&gt;
&lt;span rel="#L36" id="L36"&gt;36&lt;/span&gt;
&lt;span rel="#L37" id="L37"&gt;37&lt;/span&gt;
&lt;span rel="#L38" id="L38"&gt;38&lt;/span&gt;
&lt;span rel="#L39" id="L39"&gt;39&lt;/span&gt;
&lt;span rel="#L40" id="L40"&gt;40&lt;/span&gt;
&lt;span rel="#L41" id="L41"&gt;41&lt;/span&gt;
&lt;span rel="#L42" id="L42"&gt;42&lt;/span&gt;
&lt;span rel="#L43" id="L43"&gt;43&lt;/span&gt;
&lt;span rel="#L44" id="L44"&gt;44&lt;/span&gt;
&lt;span rel="#L45" id="L45"&gt;45&lt;/span&gt;
&lt;span rel="#L46" id="L46"&gt;46&lt;/span&gt;
&lt;span rel="#L47" id="L47"&gt;47&lt;/span&gt;
&lt;span rel="#L48" id="L48"&gt;48&lt;/span&gt;
&lt;span rel="#L49" id="L49"&gt;49&lt;/span&gt;
&lt;span rel="#L50" id="L50"&gt;50&lt;/span&gt;
&lt;span rel="#L51" id="L51"&gt;51&lt;/span&gt;
&lt;span rel="#L52" id="L52"&gt;52&lt;/span&gt;
&lt;span rel="#L53" id="L53"&gt;53&lt;/span&gt;
&lt;span rel="#L54" id="L54"&gt;54&lt;/span&gt;
&lt;span rel="#L55" id="L55"&gt;55&lt;/span&gt;
&lt;span rel="#L56" id="L56"&gt;56&lt;/span&gt;
&lt;span rel="#L57" id="L57"&gt;57&lt;/span&gt;
&lt;span rel="#L58" id="L58"&gt;58&lt;/span&gt;
&lt;span rel="#L59" id="L59"&gt;59&lt;/span&gt;
&lt;span rel="#L60" id="L60"&gt;60&lt;/span&gt;
&lt;span rel="#L61" id="L61"&gt;61&lt;/span&gt;
&lt;span rel="#L62" id="L62"&gt;62&lt;/span&gt;
&lt;span rel="#L63" id="L63"&gt;63&lt;/span&gt;
&lt;span rel="#L64" id="L64"&gt;64&lt;/span&gt;
&lt;span rel="#L65" id="L65"&gt;65&lt;/span&gt;
&lt;span rel="#L66" id="L66"&gt;66&lt;/span&gt;
&lt;span rel="#L67" id="L67"&gt;67&lt;/span&gt;
&lt;span rel="#L68" id="L68"&gt;68&lt;/span&gt;
&lt;span rel="#L69" id="L69"&gt;69&lt;/span&gt;
&lt;span rel="#L70" id="L70"&gt;70&lt;/span&gt;
&lt;span rel="#L71" id="L71"&gt;71&lt;/span&gt;
&lt;span rel="#L72" id="L72"&gt;72&lt;/span&gt;
&lt;span rel="#L73" id="L73"&gt;73&lt;/span&gt;
&lt;span rel="#L74" id="L74"&gt;74&lt;/span&gt;
&lt;span rel="#L75" id="L75"&gt;75&lt;/span&gt;
&lt;span rel="#L76" id="L76"&gt;76&lt;/span&gt;
&lt;span rel="#L77" id="L77"&gt;77&lt;/span&gt;
&lt;span rel="#L78" id="L78"&gt;78&lt;/span&gt;
&lt;span rel="#L79" id="L79"&gt;79&lt;/span&gt;
&lt;span rel="#L80" id="L80"&gt;80&lt;/span&gt;
&lt;span rel="#L81" id="L81"&gt;81&lt;/span&gt;
&lt;span rel="#L82" id="L82"&gt;82&lt;/span&gt;
&lt;span rel="#L83" id="L83"&gt;83&lt;/span&gt;
&lt;span rel="#L84" id="L84"&gt;84&lt;/span&gt;
&lt;span rel="#L85" id="L85"&gt;85&lt;/span&gt;
&lt;span rel="#L86" id="L86"&gt;86&lt;/span&gt;
&lt;span rel="#L87" id="L87"&gt;87&lt;/span&gt;
&lt;span rel="#L88" id="L88"&gt;88&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="cm"&gt;{-&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="cm"&gt;Uses the She (Stathclyde Haskell Enhancement), which you&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="cm"&gt;can get from http://bit.ly/gaVM8X.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;span class="cm"&gt;-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="cm"&gt;{-# OPTIONS_GHC -Wall -F -pgmF she #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="cm"&gt;{-# LANGUAGE GADTs, KindSignatures #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="cm"&gt;{-# LANGUAGE TypeFamilies, TypeOperators #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="cm"&gt;{-# LANGUAGE RankNTypes, FlexibleContexts #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="cm"&gt;{-# LANGUAGE MultiParamTypeClasses #-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;List&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;Prelude&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ShePrelude&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="c1"&gt;-- | List definition&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Nil&lt;/span&gt;  &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&lt;span class="c1"&gt;-- | Value-level append&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;span class="nf"&gt;append&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&lt;span class="nf"&gt;append&lt;/span&gt; &lt;span class="kt"&gt;Nil&lt;/span&gt;         &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;span class="nf"&gt;append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC25"&gt;&lt;span class="c1"&gt;-- | Type-level append&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&lt;span class="c1"&gt;-- | Value-level map&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC31"&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC32"&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="kt"&gt;Nil&lt;/span&gt;         &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC33"&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC34"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC35"&gt;&lt;span class="c1"&gt;-- | Type-level map     \/ Why can&amp;#39;t I write `{a -&amp;gt; b}`?&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC36"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="n"&gt;family&lt;/span&gt; &lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC37"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC38"&gt;&lt;span class="kr"&gt;type&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC39"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC40"&gt;&lt;span class="c1"&gt;-- | Equivalence&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC41"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;:=:&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC42"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;Refl&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC43"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC44"&gt;&lt;span class="c1"&gt;-- | Congruence proof&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC45"&gt;&lt;span class="nf"&gt;cong&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC46"&gt;&lt;span class="nf"&gt;cong&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC47"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC48"&gt;&lt;span class="c1"&gt;-- | Proof of append associativity&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC49"&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;ListClass&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC50"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;appendAssoc&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC51"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mapDistribApp&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;/div&gt;&lt;div class="line" id="LC52"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC53"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;ListClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC54"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;appendAssoc&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC55"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mapDistribApp&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC56"&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC57"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;ListClass&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;ListClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC58"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;appendAssoc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;appendAssoc&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC59"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;-- A hack /\ and \/ as She insisted on naming the constructor differently&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC60"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;mapDistribApp&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mapDistribApp&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC61"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC62"&gt;&lt;span class="cm"&gt;{-&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC63"&gt;&lt;span class="cm"&gt;Updated following http://bit.ly/gSX36R with&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC64"&gt;&lt;span class="cm"&gt;Conor.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC65"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC66"&gt;&lt;span class="cm"&gt;Above proofs again using the pi types approach.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC67"&gt;&lt;span class="cm"&gt;Had to hack my own SheSingleton instance&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC68"&gt;&lt;span class="cm"&gt;as it didn&amp;#39;t like polymorphic types. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC69"&gt;&lt;span class="cm"&gt;While missing cases do trigger GHC&amp;#39;s -Wall,&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC70"&gt;&lt;span class="cm"&gt;I prefer the error messages I got using&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC71"&gt;&lt;span class="cm"&gt;the above approach.&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC72"&gt;&lt;span class="cm"&gt;-}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC73"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC74"&gt;&lt;span class="nf"&gt;appendAssoc&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC75"&gt;&lt;span class="nf"&gt;appendAssoc&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="kr"&gt;_&lt;/span&gt;  &lt;span class="kr"&gt;_&lt;/span&gt;  &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC76"&gt;&lt;span class="nf"&gt;appendAssoc&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;appendAssoc&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="n"&gt;zs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC77"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC78"&gt;&lt;span class="nf"&gt;mapDistribApp&amp;#39;&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;:=:&lt;/span&gt; &lt;span class="kt"&gt;Append&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Map&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC79"&gt;&lt;span class="nf"&gt;mapDistribApp&amp;#39;&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Nil&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="kr"&gt;_&lt;/span&gt;  &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Refl&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC80"&gt;&lt;span class="nf"&gt;mapDistribApp&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kt"&gt;Cons&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cong&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mapDistribApp&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="n"&gt;xs&lt;/span&gt; &lt;span class="n"&gt;ys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC81"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC82"&gt;&lt;span class="kr"&gt;data&lt;/span&gt; &lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;dummy&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC83"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;SheWitNil&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC84"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kt"&gt;SheWitCons&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="n"&gt;forall&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt; &lt;span class="ow"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheSingleton&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC85"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC86"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt;  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SheWitNil&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC87"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="line" id="LC88"&gt;&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;SheChecks&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;List&lt;/span&gt;  &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheTyCons&lt;/span&gt; &lt;span class="n"&gt;sha0&lt;/span&gt; &lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt; &lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="kr"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SheWitCons&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sha0&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sheTypes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="ow"&gt;::&lt;/span&gt; &lt;span class="kt"&gt;SheProxy&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kt"&gt;List&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;There were two main points where She didn't behave as I would have liked it to, both marked in comments (lines 34 and 56). I'm wondering whether these are my own misunderstandings of the syntax. I also wondered whether it could make a stab at translating the value-level function to their type-level equivalents, given the syntactic translation. At what point couldn't it handle the transformation, I wonder.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;The points for unsound proofs, that I could spot, were non-total value-level and type-level functions. Are there other constraints that are being missed off? Are there extra tricks I could use to reduce the risks?&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;Probably should get back to my Agda proofs.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;strong&gt;Update 1: &lt;/strong&gt;Occurred to me that rather than having seperate classes for each theorem, they're both theorems about a {List}. Code has been updated to reflect this.&lt;/div&gt;
&lt;p /&gt;
&lt;div&gt;&lt;strong&gt;Update 2:&lt;/strong&gt; Conor gave tips which have been added at the bottom.&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/proofs-in-haskell-exts-she"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/proofs-in-haskell-exts-she#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/aQaBUog3c6M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/proofs-in-haskell-exts-she</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 23 Aug 2010 14:48:00 -0700</pubDate>
      <title>Update to Problem 3</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/4ZrPEwgwxuY/update-to-problem-3</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/update-to-problem-3</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span style="color: #993300;"&gt;&lt;strong&gt;Edit: Yes I know these are full of grammar and spelling errors. The comments are a bit rushed out.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I've made it so it actually follows the specification now. Seems to have gotten a little verbose.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_file_embed'&gt;
&lt;a href="http://optimusprime.posterous.com/update-to-problem-3"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/pdf.png" /&gt;&lt;/a&gt;
&lt;div class='p_embed_description'&gt;
&lt;strong&gt;Search.pdf&lt;/strong&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/ycVTKf3qFwOeuvl9aCG4xta72KbQVYTonJFKqFtwL54HMCbE2L6LJBNXP4C5/Search.pdf"&gt;Download this file&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Updated code is at&amp;nbsp;&lt;a href="http://www-users.cs.york.ac.uk/~jason/Search.lagda"&gt;http://www-users.cs.york.ac.uk/~jason/Search.lagda&lt;/a&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/update-to-problem-3"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/update-to-problem-3#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/4ZrPEwgwxuY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/update-to-problem-3</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 22 Aug 2010 08:46:00 -0700</pubDate>
      <title>Problem Number 3</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/pJPDFqzxF0U/problem-number-3-tags-vstte-agda-verification</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/problem-number-3-tags-vstte-agda-verification</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span style="color: #993300;"&gt;&lt;strong&gt;Update: Find a better version of this at&amp;nbsp;&lt;a href="http://optimusprime.posterous.com/update-to-problem-3"&gt;http://optimusprime.posterous.com/update-to-problem-3&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Whilst waiting for my washing to finish, I completed another problem. This one was considerably easier but I'm still not sure if my specification matched the judges internet. Any improvements?&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_file_embed'&gt;
&lt;a href="http://optimusprime.posterous.com/problem-number-3-tags-vstte-agda-verification"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/pdf.png" /&gt;&lt;/a&gt;
&lt;div class='p_embed_description'&gt;
&lt;strong&gt;Search.pdf&lt;/strong&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2010-08-22/GjszJerngsECFAxejDngszqgwpBywiHhojItuHmbaIbBwdBwksEbGIylrsyJ/Search.pdf"&gt;Download this file&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;div&gt;Code can be found at &lt;a href="http://www-users.cs.york.ac.uk/~jason/Search.lagda.old"&gt;http://www-users.cs.york.ac.uk/~jason/Search.lagda.old&lt;/a&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/problem-number-3-tags-vstte-agda-verification"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/problem-number-3-tags-vstte-agda-verification#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/pJPDFqzxF0U" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/problem-number-3-tags-vstte-agda-verification</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 22 Aug 2010 03:55:00 -0700</pubDate>
      <title>VSTTE competition problem 1 completed in Agda.</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/fAyf5-K0fYI/vstte-competition-problem-1-completed-in-agda</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/vstte-competition-problem-1-completed-in-agda</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I went to &lt;a href="http://www.macs.hw.ac.uk/vstte10/"&gt;VSTTE&lt;/a&gt; last week where they posed a &lt;a href="http://www.macs.hw.ac.uk/vstte10/comp.pdf"&gt;number of problems&lt;/a&gt; for participants to complete. If I hadn't broken my laptop on the first day, I may well have actually competed but c'est la vie. Anyway, it they seemed like a good set of problems to teach me some verification tools so I have just completed the first exercise in Agda. It seems a little verbose so I hope somebody can simplify it a bit.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_file_embed'&gt;
&lt;a href="http://optimusprime.posterous.com/vstte-competition-problem-1-completed-in-agda"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/pdf.png" /&gt;&lt;/a&gt;
&lt;div class='p_embed_description'&gt;
&lt;strong&gt;SumMax.pdf&lt;/strong&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2010-08-22/izkuIGlgaGdoxnHxliyEHIxCxcIirEdcBnslbnepuazBpEvqtvenovcFasxy/SumMax.pdf"&gt;Download this file&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;The code file can be found at&amp;nbsp;&lt;a href="http://www-users.cs.york.ac.uk/~jason/SumMax.lagda"&gt;http://www-users.cs.york.ac.uk/~jason/SumMax.lagda&lt;/a&gt; .&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/vstte-competition-problem-1-completed-in-agda"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/vstte-competition-problem-1-completed-in-agda#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/fAyf5-K0fYI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/vstte-competition-problem-1-completed-in-agda</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 07 Jul 2010 14:39:15 -0700</pubDate>
      <title>Google sync issue for iPhone sends you to web dead end</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/sDLhVXyJJUQ/google-sync-issue-for-iphone-sends-you-to-web-0</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/google-sync-issue-for-iphone-sends-you-to-web-0</guid>
      <description>&lt;p&gt;
	&lt;div class="posterous_bookmarklet_entry"&gt;
      &lt;blockquote class="posterous_long_quote"&gt;UPDATE: It's a &lt;a href="http://www.google.com/support/mobile/bin/answer.py?answer=151674"&gt;frickin' documentation error&lt;/a&gt;. Google changed the URL but didn't document it. Here's the proper URL for adding calendars to sync with iPhone: &lt;a href="https://www.google.com/calendar/iphoneselect"&gt;https://www.google.com/calendar/iphoneselect&lt;/a&gt;&lt;br /&gt;
This still doesn't eliminate the loop I documented, but maybe their intern in charge of this will stop playing Pac-Man one day and fix it.&lt;/blockquote&gt;

&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.downloadsquad.com/2010/07/07/how-much-google-hate-iphone/"&gt;downloadsquad.com&lt;/a&gt;&lt;/div&gt;
    &lt;p&gt;I had issues when I moved to iOS 4.0 and switched to using the built-in Google connectors. To select the calendars for my google apps domain, I had to surf to
&lt;br /&gt;&gt; &lt;a href="https://www.google.com/calendar/hosted//iphoneselect"&gt;https://www.google.com/calendar/hosted//iphoneselect&lt;/a&gt;
&lt;br /&gt;on my iPhone. Replace  with your hosted address.&lt;/p&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/google-sync-issue-for-iphone-sends-you-to-web-0"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/google-sync-issue-for-iphone-sends-you-to-web-0#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/sDLhVXyJJUQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/google-sync-issue-for-iphone-sends-you-to-web-0</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 06 Jul 2010 14:38:47 -0700</pubDate>
      <title>My slides from Meta2010</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/aM_sGyCXdUw/my-slides-from-meta2010</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/my-slides-from-meta2010</guid>
      <description>&lt;p&gt;
	&lt;div class='p_embed p_file_embed'&gt;
&lt;a href="http://optimusprime.posterous.com/my-slides-from-meta2010"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/pdf.png" /&gt;&lt;/a&gt;
&lt;div class='p_embed_description'&gt;
&lt;strong&gt;meta2010.pdf&lt;/strong&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/JLVDPEs5B4nwoo81E9phPskIBmZuFWABgEWgGdtJ4Ix3anRtb1N4xaRnLQyZ/meta2010.pdf"&gt;Download this file&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Just on the last leg of my journey back from the Second International &lt;br /&gt;Valentin Turchin Memorial Workshop on Supercompilation in Russia. &lt;br /&gt;[&lt;a href="http://meta2010.pereslavl.ru/"&gt;http://meta2010.pereslavl.ru/&lt;/a&gt;] &lt;p /&gt; I attended the workshop to improve my understanding of the field and learn &lt;br /&gt;I did! The hospitality of the organisers and the friendliness of the &lt;br /&gt;community made me feel very welcome. I was also touched by some of the &lt;br /&gt;speeches made in Turchin's memory. He lives on in those who build on his &lt;br /&gt;work, follow his philosophies and pass on tales of his exploits. &lt;p /&gt; I'll probably make a full report once I've had time to fully digest the &lt;br /&gt;knowledge and I don't feel like it's 1:30am. In the mean time. Here are &lt;br /&gt;the slides from our contribution to the proceedings.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/my-slides-from-meta2010"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/my-slides-from-meta2010#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/aM_sGyCXdUw" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/my-slides-from-meta2010</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 17 Jun 2010 09:08:32 -0700</pubDate>
      <title>Talk: Supercompilation and the Reduceron</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/Yog3Sn0U0eI/talk-supercompilation-and-the-reduceron</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/talk-supercompilation-and-the-reduceron</guid>
      <description>&lt;p&gt;
	&lt;div class="posterous_bookmarklet_entry"&gt;
      &lt;blockquote class="posterous_long_quote"&gt;&lt;i&gt;Abstract&lt;/i&gt;:
&lt;p&gt;Supercompilation is a compile-time, source-to-source optimising transformation. Among other benefits, it can remove intermediate data structures and specialise higher order functions. The Reduceron is an FPGA-based soft processor for executing lazy functional programs by graph reduction. The special purpose processor can perform in parallel many of the steps required for each reduction and can even perform some reductions speculatively.
&lt;/p&gt;&lt;p&gt;How does the combination of these technologies affect program execution times? In this talk, we shall describe the characteristics and benefits of both supercompilation and the Reduceron. We shall discuss how the two may interact, particularly with regard to the speculative evaluation facilities of the Reduceron, and we present results for a number of benchmarks.
&lt;/p&gt;&lt;p&gt;&lt;b&gt;Documents: [&lt;a href="http://www.cs.york.ac.uk/plasma/wiki/images/b/be/376-slides.pdf" class="external text" title="http://www.cs.york.ac.uk/plasma/wiki/images/b/be/376-slides.pdf" rel="nofollow"&gt;slides&lt;/a&gt;] [&lt;a href="http://www.cs.york.ac.uk/plasma/publications/pdf/ReichNaylorRuncimanM10.pdf" class="external text" title="http://www.cs.york.ac.uk/plasma/publications/pdf/ReichNaylorRuncimanM10.pdf" rel="nofollow"&gt;paper&lt;/a&gt;]&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.cs.york.ac.uk/plasma/wiki/index.php?title=Current_events"&gt;cs.york.ac.uk&lt;/a&gt;&lt;/div&gt;
    &lt;p&gt;Been a while hasn't it?&lt;/p&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/talk-supercompilation-and-the-reduceron"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/talk-supercompilation-and-the-reduceron#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/Yog3Sn0U0eI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/talk-supercompilation-and-the-reduceron</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 12 Nov 2009 09:49:00 -0800</pubDate>
      <title>Results for 12th November </title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/aOPCRBeUZ_E/results-for-12th-november</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/results-for-12th-november</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;span style="font-family: Helvetica,Arial,sans-serif;"&gt;So, all the example programs now supercompile and targeted supercompile and then execute correctly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Helvetica,Arial,sans-serif;"&gt;Results measured as execution time in Reduceron clock ticks. Relative values are (NewVal - Original)/MAX(NewVal,Original)) as a percentage. Blues show improvements.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="0" style="font-family: monospace;"&gt;

&lt;tr&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Original&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;SC&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Inc.&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;TSC&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Inc.&lt;/strong&gt;&lt;/td&gt;
&lt;td align="left" valign="bottom" colspan="2" style="font-size: 9pt;"&gt;&lt;strong&gt;TSC to SC&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Adjoxo&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;41,435,314&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,793,609&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-30.5%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,113,327&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-32.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-2.4%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Cichelli&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;64,584,466&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;63,993,016&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.9%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;63,992,793&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.9%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.0%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Clausify&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;17,798,835&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;18,037,031&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+1.3%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;14,563,929&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-18.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-19.3%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Countdown&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,457,156,815&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,321,339,185&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-9.3%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,299,369,362&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-10.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-1.7%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Fib&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,032&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,002&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-2.9%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;1,002&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-2.9%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+0.0%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;MSS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,941,170&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,941,152&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.0%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,986,598&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+0.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+0.2%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Mate&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;702,500,155&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;719,754,030&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+2.4%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;652,355,558&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-7.1%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-9.4%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;OrdList&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;30,375,282&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;28,702,618&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-5.5%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;24,914,329&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-18.0%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-13.2%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Parts&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;140,851&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;134,869&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-4.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;134,869&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-4.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+0.0%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;PermSort&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;14,845,234&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;14,845,208&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.0%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;14,603,305&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-1.6%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-1.6%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Queens&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;16,997,052&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;15,094,353&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-11.2%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;15,794,150&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-7.1%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+4.4%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Queens2&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;23,218,945&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;23,079,001&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.6%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;19,948,204&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-14.1%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-13.6%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Sudoku&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;7,525,591&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;7,317,391&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-2.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;6,921,446&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-8.0%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-5.4%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;Taut&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;10,194,636&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;6,442,574&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-36.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;6,442,536&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-36.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-0.0%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&lt;strong&gt;While&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;34,470,420&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;33,507,282&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-2.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt;"&gt;37,005,003&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+6.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+9.5%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;Minimum&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-36.8%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-36.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-19.3%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;Maximum&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+2.4%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+6.8%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #ff0000;"&gt;+9.5%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;Mean&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-6.9%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-10.3%&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 9pt; color: #0000ff;"&gt;-3.5%&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="left" valign="bottom" style="font-size: 9pt;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" colspan="5" style="font-size: 9pt;"&gt;Using my own inlining and own simplifications&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" colspan="3" style="font-size: 9pt;"&gt;A very basic heuristic for TSC&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=""&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Helvetica,Arial,sans-serif;"&gt;Targeted supercompilation doesn't generally seem to be a massive improvement yet but this is only using a very loose heuristic. More to come.&lt;/span&gt;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/results-for-12th-november"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/results-for-12th-november#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/aOPCRBeUZ_E" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/results-for-12th-november</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 28 Oct 2009 10:38:00 -0700</pubDate>
      <title>sumSumEnum results </title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/cG2vAVlCdVE/sumsumenum-results</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/sumsumenum-results</guid>
      <description>&lt;p&gt;
	&lt;p&gt;This time I have supercompiled the 'sum', 'sumEnum', 'sumSumEnum', 'main' functions (in that order). &lt;p /&gt; &lt;strong&gt;Before supercompilation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{ 
 main = emitInt (sumSumEnum (range 0 100)) 0; 
 
 range x y = case (&amp;lt;=) x y of { 
&amp;nbsp;&amp;nbsp; True -&amp;gt; Cons x (range ((+) x 1) y); 
&amp;nbsp;&amp;nbsp; False -&amp;gt; Nil; 
 }; 
 
 foldl f z (Nil)			= z; 
 foldl f z (Cons x xs)	= foldl f (f z x) xs; 
 
 map f Nil			= Nil; 
 map f (Cons x xs)	= Cons (f x) (map f xs); 
 
 plus x y = (+) x y; 
 
 sum xs = foldl plus 0 xs; 
 
 sumEnum x = sum (range 0 x); 
 
 sumSumEnum xs = sum (map sumEnum xs); 
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/3kfm81CaQ0mr34NIATyZd8mzq6DZL0h4897q76ka3DYBefphGLtH80snCx0O/sumSumEnum.png"&gt;&lt;img alt="Sumsumenum" height="450" src="http://posterous.com/getfile/files.posterous.com/optimusprime/DjiHArfH1azvGOHUsJFpGTM58lvDwmGJTSP0l8GdJ1SQrtsG1Dj16kQzqCVo/sumSumEnum.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;171700 
==== EXECUTION REPORT ==== 
Result = 0 
Ticks = 84753 
Swap = 12% 
Prim = 6% 
Unwind = 24% 
Update = 0% 
Apply = 56% 
PRS Success = 67% 
========================== 
&lt;/code&gt; &lt;strong&gt;Untargetted supercompilation:&lt;/strong&gt; &lt;code&gt;171700 
==== EXECUTION REPORT ==== 
Result = 0 
Ticks = 89268 
Swap = 11% 
Prim = 5% 
Unwind = 23% 
Update = 6% 
Apply = 53% 
PRS Success = 67% 
========================== &lt;/code&gt; &lt;br /&gt;&lt;strong&gt;Targetted supercompilation:&lt;/strong&gt; &lt;code&gt;171700 
==== EXECUTION REPORT ==== 
Result = 0 
Ticks = 42221 
Swap = 0% 
Prim = 0% 
Unwind = 12% 
Update = 0% 
Apply = 86% 
PRS Success = 99% 
========================== 
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/nvXd3lIwKOsAJZY19A5AucpjSDCvYl5Ps2jtn5g5VtR40TqILwMqAntdUfYM/sumSumEnum-supercompiled.png"&gt;&lt;img alt="Sumsumenum-supercompiled" height="450" src="http://posterous.com/getfile/files.posterous.com/optimusprime/GNN10rDq2MdcNSoftfBo7QODLpbJDtuK50CmhQjTDKVuPOLKXlbw03P8E6qG/sumSumEnum-supercompiled.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/sumsumenum-results"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/sumsumenum-results#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/cG2vAVlCdVE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="634" width="704" url="http://getfile3.posterous.com/getfile/files.posterous.com/optimusprime/3kfm81CaQ0mr34NIATyZd8mzq6DZL0h4897q76ka3DYBefphGLtH80snCx0O/sumSumEnum.png">
        <media:thumbnail height="450" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/optimusprime/DjiHArfH1azvGOHUsJFpGTM58lvDwmGJTSP0l8GdJ1SQrtsG1Dj16kQzqCVo/sumSumEnum.png.scaled.500.jpg" />
      </media:content>
      <media:content type="image/png" height="506" width="562" url="http://getfile1.posterous.com/getfile/files.posterous.com/optimusprime/nvXd3lIwKOsAJZY19A5AucpjSDCvYl5Ps2jtn5g5VtR40TqILwMqAntdUfYM/sumSumEnum-supercompiled.png">
        <media:thumbnail height="450" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/optimusprime/GNN10rDq2MdcNSoftfBo7QODLpbJDtuK50CmhQjTDKVuPOLKXlbw03P8E6qG/sumSumEnum-supercompiled.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://optimusprime.posterous.com/sumsumenum-results</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 28 Oct 2009 08:15:00 -0700</pubDate>
      <title>Results of early call-graph, supercompilation targetting experiments</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/wNVxWoPE1Fk/results-of-early-call-graph-supercompilation</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/results-of-early-call-graph-supercompilation</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Returning to our sumSquares (with unfused times) example; &lt;p /&gt; &lt;code&gt; 
{ 
 main = emitInt (sumSquares (range 0 100)) 0; 
 
 range x y = case (&amp;lt;=) x y of { 
 True -&amp;gt; Cons x (range ((+) x 1) y); 
 False -&amp;gt; Nil; 
 }; 
 
 foldl f z (Nil)			= z; 
 foldl f z (Cons x xs)	= foldl f (f z x) xs; 
 
 map f Nil			= Nil; 
 map f (Cons x xs)	= Cons (f x) (map f xs); 
 
 plus x y = (+) x y; 
 
 square x = times x x; 
 
 times x y = foldl plus 0 (replicate x y); 
 replicate n x = if (==) n 0 then Nil else Cons x (replicate ((-) n 1) x); 
 
 sumSquares xs = foldl plus 0 (map square xs); 
} 
&lt;/code&gt; &lt;p /&gt; We observe certain characteristics in the call-graph [First image in the gallery below] and supercompile specific functions resulting in a new call-graph [Second image in the gallery below]. &lt;p /&gt; Headline results, what once took 83,142 ticks now takes 21,717 ticks.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/k2CJvx7P5ytNspeLePlFZrXsbZNXU0HnwhjXYjuGQ4V0cFUYf0A6oHqR4C9T/sumSquares.png"&gt;&lt;img alt="Sumsquares" height="590" src="http://posterous.com/getfile/files.posterous.com/optimusprime/el1CqljTBneSN8cSWmqSGvKTDBkvRNnbtKTkoEe2mYj7eMJUALkFDs2aGBfi/sumSquares.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/3gwhnrpsHNxl2e5v9weoOsKdWnwrnH0j9ehVHt8vjCNjjHnTHVqxyiqeAv82/sumSquares-supercompiled.png"&gt;&lt;img alt="Sumsquares-supercompiled" height="592" src="http://posterous.com/getfile/files.posterous.com/optimusprime/2am5yoCXlzQuAb5e0YgtQ2nuhA2qGhIHR4X1zeGgy5ubUpEOwq6w5TgxEiBs/sumSquares-supercompiled.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;div class='p_see_full_gallery'&gt;&lt;a href="http://optimusprime.posterous.com/results-of-early-call-graph-supercompilation"&gt;See the full gallery on Posterous&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/results-of-early-call-graph-supercompilation"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/results-of-early-call-graph-supercompilation#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/wNVxWoPE1Fk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="694" width="588" url="http://getfile3.posterous.com/getfile/files.posterous.com/optimusprime/k2CJvx7P5ytNspeLePlFZrXsbZNXU0HnwhjXYjuGQ4V0cFUYf0A6oHqR4C9T/sumSquares.png">
        <media:thumbnail height="590" width="500" url="http://getfile5.posterous.com/getfile/files.posterous.com/optimusprime/el1CqljTBneSN8cSWmqSGvKTDBkvRNnbtKTkoEe2mYj7eMJUALkFDs2aGBfi/sumSquares.png.scaled.500.jpg" />
      </media:content>
      <media:content type="image/png" height="724" width="612" url="http://getfile9.posterous.com/getfile/files.posterous.com/optimusprime/3gwhnrpsHNxl2e5v9weoOsKdWnwrnH0j9ehVHt8vjCNjjHnTHVqxyiqeAv82/sumSquares-supercompiled.png">
        <media:thumbnail height="592" width="500" url="http://getfile1.posterous.com/getfile/files.posterous.com/optimusprime/2am5yoCXlzQuAb5e0YgtQ2nuhA2qGhIHR4X1zeGgy5ubUpEOwq6w5TgxEiBs/sumSquares-supercompiled.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://optimusprime.posterous.com/results-of-early-call-graph-supercompilation</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 27 Oct 2009 06:23:00 -0700</pubDate>
      <title>New generation call graph</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/y6H1JK2pz4s/new-generation-call-graph</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/new-generation-call-graph</guid>
      <description>&lt;p&gt;
	     So now I have hints to composition (dashed lines, empty arrow heads). Solid arrows indicate a call.&lt;br /&gt;    &lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/Qu8HDBxbv3v5ouXfL1TNMwvKHwY405DITmr5uOzMG5xXpaaPc1NKTZaqc7HC/graph.png"&gt;&lt;img alt="Graph" height="433" src="http://posterous.com/getfile/files.posterous.com/optimusprime/ru5h8cOCUu9P6VXmTx3vXV1J5ZXTaraSccilcty1WAdo3NN9JxMdanV8Ekor/graph.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/new-generation-call-graph"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/new-generation-call-graph#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/y6H1JK2pz4s" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="584" width="674" url="http://getfile5.posterous.com/getfile/files.posterous.com/optimusprime/Qu8HDBxbv3v5ouXfL1TNMwvKHwY405DITmr5uOzMG5xXpaaPc1NKTZaqc7HC/graph.png">
        <media:thumbnail height="433" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/optimusprime/ru5h8cOCUu9P6VXmTx3vXV1J5ZXTaraSccilcty1WAdo3NN9JxMdanV8Ekor/graph.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://optimusprime.posterous.com/new-generation-call-graph</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 23 Oct 2009 02:43:00 -0700</pubDate>
      <title>Why I have been quiet...</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/nyyiElVBjR8/why-i-have-been-quiet</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/why-i-have-been-quiet</guid>
      <description>&lt;p&gt;
	&lt;p&gt;My attempt at calculating call graphs for f-lite programs. Would also like to indicate data flow through composition too. &lt;p /&gt; UPDATED: Posterous doesn't like SVG apparently.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/optimusprime/Q1H0unigXEKFtlBL01rRRi0C6JRsI9lXz6G8nBpR2t2ilzgzFZdgxp4bGBXQ/graph.png"&gt;&lt;img alt="Graph" height="435" src="http://posterous.com/getfile/files.posterous.com/optimusprime/3cl7KGu9kWdpqDP0nfGrpiuoQL5bCxGbqaWJaGfx8tjPCvjUYhtCl0aV6iU8/graph.png.scaled.500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/why-i-have-been-quiet"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/why-i-have-been-quiet#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/nyyiElVBjR8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="515" width="592" url="http://getfile5.posterous.com/getfile/files.posterous.com/optimusprime/Q1H0unigXEKFtlBL01rRRi0C6JRsI9lXz6G8nBpR2t2ilzgzFZdgxp4bGBXQ/graph.png">
        <media:thumbnail height="435" width="500" url="http://getfile7.posterous.com/getfile/files.posterous.com/optimusprime/3cl7KGu9kWdpqDP0nfGrpiuoQL5bCxGbqaWJaGfx8tjPCvjUYhtCl0aV6iU8/graph.png.scaled.500.jpg" />
      </media:content>
    <feedburner:origLink>http://optimusprime.posterous.com/why-i-have-been-quiet</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 20 Oct 2009 01:33:00 -0700</pubDate>
      <title>Why does...</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/6lrJwLE-a5w/why-does</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/why-does</guid>
      <description>&lt;p&gt;
	&lt;p&gt;this definition of 'times';&lt;/p&gt;
&lt;p&gt;&lt;code&gt;times x y = foldl plus 0 (replicate x y);
replicate n x = if (==) n 0 then Nil else Cons x (replicate ((-) n 1) x);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;run slower than this;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;times x y = if (==) 0 x then 0 else (+) y (times ((-) x 1) y);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;in the sumSquares program?&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/why-does"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/why-does#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/6lrJwLE-a5w" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/why-does</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 19 Oct 2009 09:35:00 -0700</pubDate>
      <title>Next steps</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/vdTRpvBmxis/next-steps-11</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/next-steps-11</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Am going to look at targeting the supercompilation on the parts of the program that need them.&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/next-steps-11"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/next-steps-11#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/vdTRpvBmxis" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/next-steps-11</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 19 Oct 2009 09:25:00 -0700</pubDate>
      <title>Where foldls are used instead of foldrs</title>
      <link>http://feedproxy.google.com/~r/OptimusPrime/~3/-NQV6oDOeqI/more-results-0</link>
      <guid isPermaLink="false">http://optimusprime.posterous.com/more-results-0</guid>
      <description>&lt;p&gt;
	&lt;table border="0"&gt;

&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="center" valign="bottom" colspan="4" style="font-size: 10pt;"&gt;&lt;strong&gt;Reduceron Emulator Ticks (with -i1)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td align="center" valign="bottom" colspan="2" style="font-size: 10pt;"&gt;&lt;strong&gt;Unsupercompiled&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" colspan="2" style="font-size: 10pt;"&gt;&lt;strong&gt;Supercompiled&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" colspan="2" style="font-size: 10pt;"&gt;&lt;strong&gt;Relative&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;No PRS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;With PRS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;No PRS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;With PRS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" style="font-size: 10pt;"&gt;&lt;strong&gt;No PRS&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="bottom" colspan="2" style="font-size: 10pt;"&gt;&lt;strong&gt;With PRS&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 10pt;"&gt;sumDouble (foldl)&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;310,042&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;210,032&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;260,018&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;60,011&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;0.84&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;0.29&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="left" valign="bottom" style="font-size: 10pt;"&gt;sumSquares (foldl)&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;83,943&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;42,734&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;83,223&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;42,734&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;0.99&lt;/td&gt;
&lt;td align="right" valign="bottom" style="font-size: 10pt;"&gt;1.00&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://optimusprime.posterous.com/more-results-0"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://optimusprime.posterous.com/more-results-0#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/OptimusPrime/~4/-NQV6oDOeqI" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/277501/photo.jpeg</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/36UQCp8yAFpL</posterous:profileUrl>
        <posterous:firstName>Jason</posterous:firstName>
        <posterous:lastName>Reich</posterous:lastName>
        <posterous:nickName>Jason</posterous:nickName>
        <posterous:displayName>Jason Reich</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://optimusprime.posterous.com/more-results-0</feedburner:origLink></item>
  </channel>
</rss>

