<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">

<channel>
	<title>Planet Haskell</title>
	<link>http://planet.haskell.org/</link>
	<language>en</language>
	<description>Planet Haskell - http://planet.haskell.org/</description>

<item>
	<title>Antti-Juhani Kaijanaho (ibid): SF encyclopedic wiki?</title>
	<guid isPermalink="false">http://antti-juhani.kaijanaho.fi/newblog/?p=298</guid>
	<link>http://antti-juhani.kaijanaho.fi/newblog/archives/298</link>
	<description>&lt;p&gt;I sometime wish I had access to an encyclopedia, written in wiki style so that it could be updated by anybody, that had an article about every SF story and novel ever written, and every fictional concept (like ansible, hyperspace etc) ever used in an SF story, and which crosslinked these in a useful manner.&lt;/p&gt;
&lt;p&gt;Often, once I&amp;#8217;ve had a worldbuilding idea, I want to go read some of the key stories that use the same or a similar idea, so that I could see what others have already done with the idea.  Only it turns out there are no indexes that tell me &amp;#8220;antigravity has been used in these ways in SF stories, and it is a central concept in these stories&amp;#8221; etc.&lt;/p&gt;
&lt;p&gt;Anybody know of something like this?&lt;/p&gt;</description>
	<pubDate>Thu, 03 Jul 2008 21:37:32 +0000</pubDate>
	<dc:creator>Antti-Juhani Kaijanaho</dc:creator>
</item>
<item>
	<title>Real-World Haskell: Last Call for Comments on Most Chapters</title>
	<guid isPermalink="false">http://www.realworldhaskell.org/blog/?p=48</guid>
	<link>http://www.realworldhaskell.org/blog/2008/07/03/last-call-for-comments-on-most-chapters/</link>
	<description>We are in the final stages of getting this book ready for the production process at O&amp;#8217;Reilly.  We&amp;#8217;re going through all the remaining feedback right now, and also getting the last few chapters ready to post.
&lt;br /&gt;&lt;br /&gt;
This is the last call for comments on all chapters posted to the &lt;a href=&quot;http://book.realworldhaskell.org/beta/&quot;&gt;beta site&lt;/a&gt;.  Once we complete this final pass, it will be too late to incorporate any changes suggested by new comments into the book.
&lt;br /&gt;&lt;br /&gt;
The last three chapters will be coming along soon, and we&amp;#8217;ll make sure to let you know about them.
&lt;br /&gt;&lt;br /&gt;
Thank you again for all your insightful feedback (and even debates in the comment system).  I&amp;#8217;ve got to say that some of my favorite moments as an author of this book have been when I pull up a page, see a paragraph, and see something like &amp;#8220;25 comments&amp;#8221; under it &amp;#8212; and those comments expand into a debate about what exactly I should have done right there.  Or perhaps a discussion about how OCaml does it &amp;#8212; you never know. You all rock.</description>
	<pubDate>Thu, 03 Jul 2008 19:28:15 +0000</pubDate>
	<dc:creator>John Goerzen (jgoerzen@complete.org)</dc:creator>
</item>
<item>
	<title>Edward Kmett: MSFP 2008</title>
	<guid isPermalink="false">http://comonad.com/reader/2008/msfp/</guid>
	<link>http://comonad.com/reader/2008/msfp/</link>
	<description>&lt;p&gt;I'm off to &lt;a href=&quot;http://msfp.org.uk/&quot;&gt;MSFP'08&lt;/a&gt; (which is colocated with &lt;a href=&quot;http://www.ru.is/icalp08/&quot;&gt;ICALP&lt;/a&gt;) and should have a day or two spare on either side of the workshop to let me find stuff to do in Iceland and meet people.&lt;/p&gt;
&lt;p&gt;I'd love to get a chance to meet folks in person.&lt;/p&gt;
&lt;p&gt;If anyone else is planning on being in the area, please feel free to &lt;a href=&quot;mailto:ekmett@gmail.com&quot;&gt;drop me a line&lt;/a&gt;.
&lt;/p&gt;</description>
	<pubDate>Thu, 03 Jul 2008 18:01:53 +0000</pubDate>
	<dc:creator>Edward Kmett</dc:creator>
</item>
<item>
	<title>John Goerzen (CosmicRay): Video uploading sites?</title>
	<guid isPermalink="false">http://changelog.complete.org/posts/727-guid.html</guid>
	<link>http://changelog.complete.org/posts/727-Video-uploading-sites.html</link>
	<description>I'm working on switching from using a Mac to using Linux for editing video.  I have a mini-DV camcorder that a bought a few years back, and I've been looking at capture and editing software for Linux.&lt;br /&gt;
&lt;br /&gt;
Along with that, I want to post some videos online for family to be able to see  I want to preserve the original quality as much as possible, offer the option to download the video, and be able to share some videos with family only (not the entire Internet).&lt;br /&gt;
&lt;br /&gt;
I've been looking at various reviews of video sites (such as this &lt;a href=&quot;http://www.pcworld.com/article/136021-1/tested_the_10_best_places_to_share_video_online.html#howwetest&quot;&gt;PCWorld one&lt;/a&gt;) and decided to look at blip.tv and Vimeo in more detail.&lt;br /&gt;
&lt;br /&gt;
Blip seems to have lots of controls, options, etc. And, they seem to really care about end users, respond fast, and care about freedom.  There's an &lt;a href=&quot;http://www.theinquirer.net/en/inquirer/news/2006/05/31/bliptv-to-become-an-open-youtube-alternative&quot;&gt;impressive response&lt;/a&gt; from their support team concerning Ogg Theora out there.  They offer FTP uploads (which are a huge improvement over HTTP POST uploading, in my opinion, and easily scriptable).  They can also automatically post your video to archive.org or about a dozen other video or blogging sites.&lt;br /&gt;
&lt;br /&gt;
But what I want to do is not really what they are aiming at.  They are set up for &quot;channels&quot; (you can apparently only have one channel per user), and for more professional users.  Most notably, you can't make videos private or restricted without paying for their $100/year or so &quot;pro&quot; account.&lt;br /&gt;
&lt;br /&gt;
Vimeo looks very much like the Flickr of video.  They do offer various options for restricting who can see a video.  When they transcode video to Flash, they have the option of preserving it in HD, which blip.tv doesn't (both go 640x480 or so by default, and blip maximizes out that that).  Though both offer the option to download the full, unmodified original.  Vimeo has only one option for uploading, and it doesn't seem to work well with Firefox.  They have little detail about anything in their docs.  Maybe it's more the Photobucket of video than the Flickr of video.  (Oh, who am I kidding -- that's Youtube).&lt;br /&gt;
&lt;br /&gt;
Of course, there is Youtube.  Maxes out at 320x240, doesn't offer the original for downloading.  Doesn't make me think all that positively about them.&lt;br /&gt;
&lt;br /&gt;
I could also use Flickr.  I'm not sure if they offer the original, but there's a 90-second limit on uploads there.&lt;br /&gt;
&lt;br /&gt;
Any other thoughts?</description>
	<pubDate>Thu, 03 Jul 2008 11:38:55 +0000</pubDate>
	<dc:creator>nospam@example.com (John Goerzen)</dc:creator>
</item>
<item>
	<title>"FP Lunch": braincurry</title>
	<guid isPermalink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=105</guid>
	<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=105</link>
	<description>&lt;p&gt;Last Friday, I presented the braincurry project, which is my attempt, with assistance from Henrik Nilsson, to create a domain specific language to define and execute experiments and simulations related to cellular neuroscience.  I spent a bit of time introducing neurons, dendrites, axons, synapses and the problem of synaptic integration (given a pattern of inputs to a neuron, can we predict its outputs?) I also talked briefly about the preparation I am currently working on in Tom Matheson&amp;#8217;s lab in Leicester, the locust visual system and the influence of locust swarming on agriculture and crop failure.&lt;/p&gt;
&lt;p&gt;Experiments with invertebrates and in particular insects can include an large number of modalities, including visual, auditory and olfactory sensory stimulation, intracellular or extracellular recording from multiple neurons, and movement observation - all at the same time. I presented a prototype language for defining these experiments and their associated analyses.&lt;/p&gt;
&lt;p&gt;I restrict myself to experiments that consists of trials, i.e. finite episodes during which a set of stimuli (visual, waveforms of currents to be injected into neurons, etc) are presented and responses (neuron spikes, etc) are recorded. Analog input and output is controlled from a simple FFI binding to the Comedi library, which in turns controls a National Instruments data acquisition board. All aspects of the stimuli must be known before the beginning of the trial, so there are no dynamic or reactive components, although stimuli can be influenced by the outcome of previous trials. This restriction suggests a very simple definition of a trial, which is a list of trial specifications:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://sneezy.cs.nott.ac.uk/fplunch/weblog/latexrender/pictures/8ae7a60c1d88d631956fa7c24c84c463.png&quot; title=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; type Trial = [TrialSpecification]&amp;#10;&amp;gt; data TrialSpecification  = RecordWaveform Channel&amp;#10;&amp;gt;                           | PlayVideo dots&amp;#10;&amp;gt;                           | PlayAudio dots&amp;#10;&quot; alt=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; type Trial = [TrialSpecification]&amp;#10;&amp;gt; data TrialSpecification  = RecordWaveform Channel&amp;#10;&amp;gt;                           | PlayVideo dots&amp;#10;&amp;gt;                           | PlayAudio dots&amp;#10;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In addition, I would like to be able to specify analyses that are performed online, ie immediately after a trial has concluded.  I can implement this in an untyped manner by giving names to recordings and additionally specify names as inputs and outputs of analyses. First I define a results data type:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://sneezy.cs.nott.ac.uk/fplunch/weblog/latexrender/pictures/1f32916b831beb202b06d71fcf526efd.png&quot; title=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; data Result  = ResWaveform [Double]&amp;#10;&amp;gt;              | ResNumber Double&amp;#10;&amp;gt;              | ResBool Bool | dots&amp;#10;&amp;gt; type Name = String&amp;#10;&quot; alt=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; data Result  = ResWaveform [Double]&amp;#10;&amp;gt;              | ResNumber Double&amp;#10;&amp;gt;              | ResBool Bool | dots&amp;#10;&amp;gt; type Name = String&amp;#10;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And modify TrialSpecification&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://sneezy.cs.nott.ac.uk/fplunch/weblog/latexrender/pictures/74ba49069e08ffe6caf9dc6a3c61b993.png&quot; title=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; data TrialSpecification&amp;#10;&amp;gt;   = RecordWaveform Channel Name&amp;#10;&amp;gt;   | PlayVideo dots&amp;#10;&amp;gt;   | PlayAudio dots&amp;#10;&amp;gt;   | Analysis Name (Result -&amp;gt; Result) Name&amp;#10;&quot; alt=&quot;&amp;#10;%format dots = &amp;amp;#8220;\ldots&amp;amp;#8221;&amp;#10;&amp;#10;&amp;gt; data TrialSpecification&amp;#10;&amp;gt;   = RecordWaveform Channel Name&amp;#10;&amp;gt;   | PlayVideo dots&amp;#10;&amp;gt;   | PlayAudio dots&amp;#10;&amp;gt;   | Analysis Name (Result -&amp;gt; Result) Name&amp;#10;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One advantage of this approach is that I do not have to specify the order in which analyses are carried out if they depend on one another; their dependencies can be resolved automatically, although not in a type-safe manner. Trials are also very easy to compose.  We discussed various possibilities for defining a type-safe trial, including monads and GADTs. I talked a bit about how this language may allow me to use parametrised trials to define general higher order trials that can determine, for instance, whether any one trial parameter influences some experimental outcome.&lt;/p&gt;</description>
	<pubDate>Thu, 03 Jul 2008 10:38:39 +0000</pubDate>
	<dc:creator>Tom Nielsen</dc:creator>
</item>
<item>
	<title>Alex McLean: Visualisation of a triangular mesh</title>
	<guid isPermalink="false">http://doc.gold.ac.uk/~ma503am/alex/?p=83</guid>
	<link>http://doc.gold.ac.uk/~ma503am/alex/visualisation-of-a-mesh/</link>
	<description>&lt;p&gt;Here&amp;#8217;s a visualisation of my drumskin simulation, slowed down a lot.  I hit the (square) drumskin in various places then hit it all over until it goes crazy.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I have a prototype of control over it with phonetics which I&amp;#8217;ll be demoing tomorrow (Friday 4th July) at the sonic arts festival &lt;a href=&quot;http://expounconference.pbwiki.com/&quot;&gt;unconference&lt;/a&gt; in Brighton, probably around 11am although being an unconference, the schedule might change.  I&amp;#8217;ll also be on a panel with my favourite heroes &lt;a href=&quot;http://www.informatics.sussex.ac.uk/users/nc81/&quot;&gt;Nick Collins&lt;/a&gt;, &lt;a href=&quot;http://www.mcld.co.uk/&quot;&gt;Dan Stowell&lt;/a&gt; and &lt;a href=&quot;http://www.spacedog.biz/&quot;&gt;Sarah Angliss&lt;/a&gt; later in the day.&lt;/p&gt;</description>
	<pubDate>Thu, 03 Jul 2008 09:47:34 +0000</pubDate>
	<dc:creator>Alex</dc:creator>
</item>
<item>
	<title>Paul R Brown: Beust Sequence Ruminations</title>
	<guid isPermalink="false">http://mult.ifario.us/p/beust-sequence-ruminations</guid>
	<link>http://mult.ifario.us/p/beust-sequence-ruminations</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://beust.com&quot;&gt;Cédric&lt;/a&gt; &lt;a href=&quot;http://beust.com/weblog/archives/000491.html&quot;&gt;posted&lt;/a&gt; a nice puzzle on his blog:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;[W]rite a counter function that counts from 1 to max
but only returns numbers whose digits don't repeat.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://crazybob.org&quot;&gt;Bob&lt;/a&gt; &lt;a href=&quot;http://twitter.com/crazybob/statuses/846377496&quot;&gt;tweeted&lt;/a&gt;
about a minimal &lt;a href=&quot;http://crazybob.org/BeustSequence.java.html&quot;&gt;solution&lt;/a&gt; in
terms of execution time, although (like the guy in the &lt;a href=&quot;http://stuffthathappens.com/blog/2008/07/02/script-kiddies/&quot;&gt;cartoon&lt;/a&gt;)
I still like my Haskell version of the sequence (up to some details
with use of &lt;code&gt;Data.Int.Int64&lt;/code&gt; and typing the enumeration):&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;f k = [ n | n &amp;lt;- [1..k], (length . show $ n) == (length . nub . show $ n) ]&lt;/pre&gt;

&lt;p&gt;And the function to compute the maximum gap:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;
drop_tail k = reverse . (drop k) . reverse
by_pairs u = zip (drop 1 u) (drop_tail 1 u)
g k = maximum . map (uncurry (-)) . by_pairs . f $ k&lt;/pre&gt;

&lt;p&gt;This approach, while visually appealing, is unacceptably slow, even
with some of the usual optimizations applied. The fact is that any
solution that is implemented in terms of testing all of the numbers
between &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;k&lt;/code&gt; will perform orders of
magnitude more poorly than the recursive style that Bob's using. But
how would I know that...?&lt;/p&gt;

&lt;h3&gt;Subfactorials, Derangements, and Chooses&lt;/h3&gt;

&lt;p&gt;A &lt;em&gt;derangement&lt;/em&gt; is a permutation with no fixed points, e.g.,
&lt;code&gt;(123)&lt;/code&gt; is a derangement of the set &lt;code&gt;{1,2,3}&lt;/code&gt;,
but &lt;code&gt;(12)&lt;/code&gt; is not because it maps &lt;code&gt;3&lt;/code&gt; to
&lt;code&gt;3&lt;/code&gt;. Like the number of permutations of an
&lt;code&gt;n&lt;/code&gt;-element set (&lt;code&gt;n!&lt;/code&gt;), the number of
derangements has its own function called the subfactorial and written
&lt;code&gt;!n&lt;/code&gt;. MathWorld has a decent &lt;a href=&quot;http://mathworld.wolfram.com/Derangement.html&quot;&gt;write-up&lt;/a&gt;,
with the major takeaway for present purposes being that &lt;code&gt;!n ~
n!&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The number of elements in Cédric's set, for a fixed radix
&lt;code&gt;n&lt;/code&gt; is the sum from &lt;code&gt;k=0&lt;/code&gt; up to &lt;code&gt;n&lt;/code&gt;
of &lt;code&gt;!k (n choose k)&lt;/code&gt;, and that's &lt;em&gt;much&lt;/em&gt; smaller than
&lt;code&gt;n&lt;sup&gt;n&lt;/sup&gt;&lt;/code&gt;. (This reminds me of the whole &quot;bad
shuffle&quot; &lt;a href=&quot;http://mult.ifario.us/p/gap-bad-shuffle-and-playing-with-permutations&quot;&gt;meme&lt;/a&gt;
from a long time ago.)&lt;/p&gt;

&lt;p&gt;Just how much less work does the enumeration approach require than
the iteration approach? Here's a quick snippet to compute the number
of derangements and the corresponding Beust number for a given radix:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;fac :: Integer -&amp;gt; Integer
fac 0 = 1
fac n = n * (fac (n-1))

choose :: Integer -&amp;gt; Integer -&amp;gt; Integer
choose n k = (fac n) `div` ((fac k) * (fac (n-k)))

d :: Integer -&amp;gt; Integer
d 1 = 0
d 2 = 1
d n = (n-1) * ( d (n-1) + d (n-2) )

b :: Integer -&amp;gt; Integer
b n = sum [ (d k) * (n `choose` k) | k &amp;lt;- [ 1..n ] ]&lt;/pre&gt;

&lt;p&gt;Then, &lt;code&gt;b&lt;sub&gt;10&lt;/sub&gt;&lt;/code&gt; is &lt;code&gt;3628799&lt;/code&gt;, so a
solution like Bob's should have around a 2500-fold advantage over a
more brute force method. And that advantage gets &lt;em&gt;huge&lt;/em&gt; in
short order. As reminder of how much bigger &lt;code&gt;n&lt;sup&gt;n&lt;/sup&gt;&lt;/code&gt;
is than &lt;code&gt;n!&lt;/code&gt; and friends, &lt;code&gt;26&lt;sup&gt;26&lt;/sup&gt;&lt;/code&gt; is
roughly &lt;code&gt;15,264,691,107&lt;/code&gt; times larger than
&lt;code&gt;b&lt;sub&gt;26&lt;/sub&gt;&lt;/code&gt;...&lt;/p&gt;</description>
	<pubDate>Thu, 03 Jul 2008 06:10:59 +0000</pubDate>
	<dc:creator>Paul R. Brown (paulrbrown@gmail.com)</dc:creator>
</item>
<item>
	<title>Manuel M T Chakravarty: Unwelcome Advice from Intel</title>
	<guid isPermalink="false">http://justtesting.org/post/40782131</guid>
	<link>http://justtesting.org/post/40782131</link>
	<description>&lt;a href=&quot;http://blogs.intel.com/research/2008/06/unwelcome_advice.php&quot;&gt;Unwelcome Advice from Intel&lt;/a&gt;</description>
	<pubDate>Thu, 03 Jul 2008 05:04:35 +0000</pubDate>
</item>
<item>
	<title>Manuel M T Chakravarty: Mac OS X Intel/Leopard installer for GHC 6.8.3 (final)</title>
	<guid isPermalink="false">http://justtesting.org/post/40782063</guid>
	<link>http://justtesting.org/post/40782063</link>
	<description>&lt;a href=&quot;http://www.cse.unsw.edu.au/~chak/haskell/GHC-6.8.3-i386.pkg&quot;&gt;Mac OS X Intel/Leopard installer for GHC 6.8.3 (final)&lt;/a&gt;</description>
	<pubDate>Thu, 03 Jul 2008 05:03:35 +0000</pubDate>
</item>
<item>
	<title>Haskell Weekly News: Haskell Weekly News: July 2, 2008</title>
	<guid isPermalink="false">http://sequence.complete.org/387 at http://sequence.complete.org</guid>
	<link>http://sequence.complete.org/hwn/20080702</link>
	<description>Haskell Weekly News: July 02, 2008
&lt;p&gt;Welcome to issue 75 of HWN, a newsletter covering
   developments in the &lt;a href=&quot;http://haskell.org/&quot;&gt;Haskell&lt;/a&gt; community.&lt;/p&gt;
&lt;h4&gt;Announcements&lt;/h4&gt; &lt;p&gt;&lt;em&gt;Anglo Haskell 2008&lt;/em&gt;. Matthew Sackman
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.general/16272&quot;&gt;announced&lt;/a&gt;
   &lt;a href=&quot;http://www.haskell.org/haskellwiki/AngloHaskell/2008&quot;&gt;AngloHaskell
   2008&lt;/a&gt;, a gathering of all people Haskell-related from beginners, to
   seasoned hackers to academic giants. All and more are welcomed by large
   fuzzy green lambdas. The proposed dates and location are Friday the 8th
   and Saturday the 9th of August, at Imperial College, London.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;CFP - Special Issue of Fundamenta Informaticae on Dependently Typed
Programming&lt;/em&gt;. Wouter Swierstra
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.general/16269&quot;&gt;announced&lt;/a&gt;
   a call for papers for a special issue of &lt;a href=&quot;http://fi.mimuw.edu.pl/&quot;&gt;Fundamenta Informaticae&lt;/a&gt; on &lt;a href=&quot;http://sneezy.cs.nott.ac.uk/darcs/DTP08/journal.html&quot;&gt;Dependently
   Typed Programming&lt;/a&gt;. The deadline for submissions is October 1.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Gtk2Hs 0.9.13&lt;/em&gt;. Peter Gavin
   &lt;a href=&quot;http://www.haskell.org//pipermail/haskell-cafe/2008-June/044805.html&quot;&gt;announced&lt;/a&gt;
   the release of Gtk2Hs 0.9.13, including bindings for Gnome VFS and
   GStreamer, a new Gtk+ tutorial adapted by Hans van Thiel, cairo image
   stride support, and more.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hasim&lt;/em&gt;. Jochem Berndsen
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.cafe/41881&quot;&gt;announced&lt;/a&gt;
   Hasim, a &lt;a href=&quot;http://huygens.functor.nl/hasim&quot;&gt;small project&lt;/a&gt;
   to create a library to do discrete event simulation in Haskell, using
   monads to define a domain-specific language for &quot;actions&quot; of a process.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Galois move&lt;/em&gt;. Don Stewart
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.cafe/41847&quot;&gt;announced&lt;/a&gt;
   that Galois has completed the move of its data center. Expect speedier
   response times for hackage.haskell.org and darcs.haskell.org.&lt;/p&gt;
&lt;h4&gt;Google Summer of Code&lt;/h4&gt; &lt;p&gt;Progress
updates from participants in the 2008 &lt;a href=&quot;http://hackage.haskell.org/trac/summer-of-code/wiki/SoC2008&quot;&gt;Google
Summer of Code.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Hoogle 4&lt;/em&gt;. Neil Mitchell (ndm)
   is working on &lt;a href=&quot;http://code.haskell.org/hoogle/&quot;&gt;Hoogle 4&lt;/a&gt;. &lt;a href=&quot;http://neilmitchell.blogspot.com/2008/06/gsoc-hoogle-week-5.html&quot;&gt;This
   week&lt;/a&gt;, Neil worked on better Haddock database generation, lazy name
   searching, and a snazzy --info flag for Hoogle.  Next up: type search!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;DPH physics engine&lt;/em&gt;. Roman Cheplyaka (Feuerbach)
   is working on a &lt;a href=&quot;http://haskell.org/haskellwiki/Hpysics&quot;&gt;physics engine&lt;/a&gt; using &lt;a href=&quot;http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell&quot;&gt;Data
   Parallel Haskell&lt;/a&gt;. &lt;a href=&quot;http://physics-dph.blogspot.com/2008/06/status-report-week-5.html&quot;&gt;This
   week&lt;/a&gt;, he worked on implementing Mirtich's
   V-Clip algorithm for collision detection (and &lt;a href=&quot;http://physics-dph.blogspot.com/2008/07/v-clip-seems-to-work.html&quot;&gt;got
   it to work&lt;/a&gt;), cabalized his project and added documentation.  He also
   ran into an interesting QuickCheck puzzle.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Generic tries&lt;/em&gt;. Jamie Brandon
   is working on a library for efficient maps using generalized tries. &lt;a href=&quot;http://jamiiecb.blogspot.com/2008/06/week-3-progress.html&quot;&gt;This
   week&lt;/a&gt;, he created a generic framework for automatically
   running QuickCheck tests at a number of different types.
   This week he plans to synthesize the many suggestions from the &lt;a href=&quot;http://thread.gmane.org/gmane.comp.lang.haskell.libraries/9259&quot;&gt;discussion
   on the libraries list&lt;/a&gt; into a stable API design.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Language.C&lt;/em&gt;. Benedikt Huber (visq)
   is &lt;a href=&quot;http://www.sivity.net/projects/language.c/wiki/&quot;&gt;working on
   Language.C&lt;/a&gt;, a standalone parser/pretty printer library for C99. &lt;a href=&quot;http://hsbene.blogspot.com/2008/07/last-week-on-languagec-1.html&quot;&gt;This
   week&lt;/a&gt; he worked on a better representation for declarators, and
   abstracted the notion of an InputStream over both String and ByteString,
   among other accomplishments.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;GHC plugins&lt;/em&gt;. Max Bolingbroke
   is working on dynamically loaded plugins for GHC.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Cabal dependency framework&lt;/em&gt;. Andrea Vezzosi (Saizan)
   is working on a &lt;a href=&quot;http://code.haskell.org/~Saizan/cabal&quot;&gt;make-like
   dependency analysis framework&lt;/a&gt; for Cabal.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;GHC API&lt;/em&gt;. Thomas Schilling (nominolo)
   is working on &lt;a href=&quot;http://hackage.haskell.org/trac/ghc/wiki/GhcApiStatus&quot;&gt;improvements
   to the GHC API&lt;/a&gt;. Officials at HWN headquarters have released a statement
   reversing their previous position regarding the existence of Thomas, citing
   regrettably faulty information to explain their previous misapprehensions.
   Expect to hear more from Thomas soon, now that he has finished graduating
   and moving.&lt;/p&gt;
&lt;h4&gt;Libraries&lt;/h4&gt; Proposals and extensions to the  &lt;a href=&quot;http://haskell.org/haskellwiki/Library_submissions&quot;&gt;standard
libraries.&lt;/a&gt; &lt;p&gt;&lt;em&gt;GetOpt formatting improvements&lt;/em&gt;. Duncan Coutts
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.libraries/9415&quot;&gt;proposed&lt;/a&gt;
   some modifications to make the output of the System.Console.GetOpt library
   more readable, resulting in quite a bit of discussion.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;HughesPJ improvements&lt;/em&gt;. Benedikt Huber
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.libraries/9377&quot;&gt;proposed&lt;/a&gt;
   a patch with some bug fixes, performance improvements, and QuickCheck
   test suite for the Text.PrettyPrint.HughesPJ pretty-printing library.&lt;/p&gt;
&lt;h4&gt;Discussion&lt;/h4&gt; &lt;p&gt;&lt;em&gt;A Monad for on-demand file generation?&lt;/em&gt;. Joachim
Breitner
   &lt;a href=&quot;http://thread.gmane.org/gmane.comp.lang.haskell.cafe/41868&quot;&gt;asked&lt;/a&gt;
   about a monad for transparently tracking files which may need to be
   regenerated due to dependencies, leading to an interesting discussion of
   incremental computation, strict vs. lazy I/O, and other issues.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;New mailing list proposal: Haskell-Edu&lt;/em&gt;. Benjamin L. Russell
   sent out a message &lt;a href=&quot;http://thread.gmane.org/gmane.comp.lang.haskell.general/16271&quot;&gt;proposing&lt;/a&gt;
   a new mailing list hosted at haskell.org, &quot;Haskell-Edu: The Haskell
   Educational Mailing List.&quot; The new mailing list would be guided by
   the principle that Haskell is useful not just in research, but also in
   teaching programming as part of a liberal arts education. Comments and
   discussion welcomed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Learning GADT types to simulate dependent types&lt;/em&gt;. Paul Johnson
   is trying to use GADTs to simulate
   aspects of a dependently typed system, and &lt;a href=&quot;http://thread.gmane.org/gmane.comp.lang.haskell.cafe/41848&quot;&gt;asks&lt;/a&gt;
   for help improving his Oleg rating.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Call graph tool?&lt;/em&gt;. C.M.Brown
   &lt;a href=&quot;http://thread.gmane.org/gmane.comp.lang.haskell.cafe/41786&quot;&gt;asked&lt;/a&gt;
   whether there is a tool for visualizing the call graph for a collection
   of source files, leading to a discussion of various tools.&lt;/p&gt;
&lt;h4&gt;Jobs&lt;/h4&gt; &lt;p&gt;&lt;em&gt;Formal methods and automated reasoning at Rockwell
Collins&lt;/em&gt;. Janis Voigtlaender
   &lt;a href=&quot;http://article.gmane.org/gmane.comp.lang.haskell.general/16266&quot;&gt;passed
   on&lt;/a&gt; an opening for a Senior Systems Engineer at &lt;a href=&quot;http://www.rockwellcollins.com&quot;&gt;Rockwell Collins&lt;/a&gt;.  The opening
   is for a computer scientist or engineer to develop and apply automated
   analysis to computer systems and to pursue research in formal methods
   and automated reasoning. Contact: rmgatto at rockwellcollins.com.&lt;/p&gt;
&lt;h4&gt;Blog noise&lt;/h4&gt; &lt;a href=&quot;http://planet.haskell.org&quot;&gt;Haskell news&lt;/a&gt; from
the  &lt;a href=&quot;http://haskell.org/haskellwiki/Blog_articles&quot;&gt;blogosphere.&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;Roman Cheplyaka: &lt;a href=&quot;http://physics-dph.blogspot.com/2008/07/v-clip-seems-to-work.html&quot;&gt;&lt;em&gt;V-Clip
seems to work!&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p&gt;Benedikt Huber: &lt;a href=&quot;http://hsbene.blogspot.com/2008/07/last-week-on-languagec-1.html&quot;&gt;&lt;em&gt;Last
    week on Language.C (1)&lt;/em&gt;&lt;/a&gt;. An update on Benedikt's
    Google Summer of Code project.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Jamie Brandon: &lt;a href=&quot;http://jamiiecb.blogspot.com/2008/06/week-3-progress.html&quot;&gt;&lt;em&gt;Week
    3 progress&lt;/em&gt;&lt;/a&gt;. An update on Jamie's Google
    Summer of Code project.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Philip Wadler: &lt;a href=&quot;http://wadler.blogspot.com/2008/06/welcome-to-scotland-neil-patricia-and.html&quot;&gt;&lt;em&gt;Welcome
    to Scotland, Neil, Patricia, and
    Conor!&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; codders: &lt;a href=&quot;http://talkingcode.co.uk/2008/06/30/coding-style-haskell/&quot;&gt;&lt;em&gt;Coding
    style, Haskell&lt;/em&gt;&lt;/a&gt;. codders likes how Real World Haskell
    gives some hints about Haskell coding style and culture in
    addition to teaching the language itself.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; zoo: &lt;a href=&quot;http://imonad.com/blog/2008/06/haskell-plug-in-for-eclipse/&quot;&gt;&lt;em&gt;Haskell
    plug-in for Eclipse&lt;/em&gt;&lt;/a&gt;. zoo explains how to install the
    &lt;a href=&quot;http://sourceforge.net/projects/eclipsefp/&quot;&gt;Haskell
    Eclipse plugin&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Dan Piponi (sigfpe): &lt;a href=&quot;http://sigfpe.blogspot.com/2008/06/blessed-mans-formula-for-holey.html&quot;&gt;&lt;em&gt;A
    blessed man's formula for holey containers&lt;/em&gt;&lt;/a&gt;. Dan
    descries an enlightening derivation of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Fa%C3%A0_di_Bruno's_formula#Combinatorial_form&quot;&gt;combinatorial
    form of Faa di Bruno's formula&lt;/a&gt; from the perspective
    of derivatives of types.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Roman Cheplyaka: &lt;a href=&quot;http://physics-dph.blogspot.com/2008/06/status-report-week-5.html&quot;&gt;&lt;em&gt;Status
    report: week 5&lt;/em&gt;&lt;/a&gt;. An update on Roman's Google
    Summer of Code project.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; codders: &lt;a href=&quot;http://talkingcode.co.uk/2008/06/28/more-haskell-fun/&quot;&gt;&lt;em&gt;More
    Haskell fun&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; Marco Tulio Gontijo e Silva: &lt;a href=&quot;http://marcotmarcot.blogspot.com/2008/06/rank-2-types.html&quot;&gt;&lt;em&gt;Rank
    2 Types&lt;/em&gt;&lt;/a&gt;. Marco describes a practical use
    for GHC's rank-2 types.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Edward Kmett: &lt;a href=&quot;http://comonad.com/reader/2008/memoizing-context/&quot;&gt;&lt;em&gt;Memoizing
    Context&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; JP Moresmau: &lt;a href=&quot;http://jpmoresmau.blogspot.com/2008/06/deserializing-json-to-haskell-data.html&quot;&gt;&lt;em&gt;Deserializing
    JSON to Haskell Data objects&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&gt;&gt;&gt; codders: &lt;a href=&quot;http://talkingcode.co.uk/2008/06/27/getting-started-with-haskell-still/&quot;&gt;&lt;em&gt;Getting
    started with Haskell... still&lt;/em&gt;&lt;/a&gt;. codders is learning Haskell by
    reading the beta version of &lt;a href=&quot;http://www.realworldhaskell.org/&quot;&gt;Real
    World Haskell&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Neil Mitchell: &lt;a href=&quot;http://neilmitchell.blogspot.com/2008/06/gsoc-hoogle-week-5.html&quot;&gt;&lt;em&gt;GSoC
    Hoogle: Week 5&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Arnar: &lt;a href=&quot;http://www.hvergi.net/2008/06/parsing-json-with-haskell/&quot;&gt;&lt;em&gt;Parsing
    JSON with Haskell&lt;/em&gt;&lt;/a&gt;. A nice example of using &lt;a href=&quot;http://legacy.cs.uu.nl/daan/parsec.html&quot;&gt;Parsec&lt;/a&gt;
    to parse JSON.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Thomas Hartman: &lt;a href=&quot;http://ramblings.tumblr.com/post/39794244/happs-tutorial&quot;&gt;&lt;em&gt;HAppS
    Tutorial&lt;/em&gt;&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;Quotes of the Week&lt;/h4&gt; &lt;ul&gt;&lt;li&gt;&lt;em&gt;quicksilver&lt;/em&gt;: [on what OS sjanssen
uses] sjanssen runs haskell programs in his head; much more efficient.&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;EvilTerran&lt;/em&gt;: &quot;We were somewhere around Barstow, on the
    edge of the desert, when the phantom types began to take hold.&quot;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;audreyt&lt;/em&gt;: o/~ the phantom of the typesystem is here / inside
    my mind! o/~&lt;/li&gt; &lt;li&gt;&lt;em&gt;dmwit&lt;/em&gt;: No, no, no, ($) isn't right-assoc,
    it's wrong-assoc.&lt;/li&gt; &lt;li&gt;&lt;em&gt;solrize&lt;/em&gt;: this would never happen in
    haskell: i sent in a search query to a certain python program, but left
    the query field empty, expecting to get back an error message.  instead
    it found a bunch of books written by the diet doctor Gary Null.&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;heatsink&lt;/em&gt;: We're all inside do-blocks in the IO monad if
    you think about it.&lt;/li&gt; &lt;li&gt;&lt;em&gt;djsiegel&lt;/em&gt;: [upon having a question
    answered by dons] oh my, I'm talking to the man&lt;/li&gt; &lt;li&gt;&lt;em&gt;mar77a&lt;/em&gt;:
    the first computers were big because they were actually cupboards with
    fast humans inside&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;About the Haskell Weekly News&lt;/h4&gt; &lt;p&gt;New editions are posted to
   &lt;a href=&quot;http://www.haskell.org/mailman/listinfo/haskell&quot;&gt;the Haskell
   mailing list&lt;/a&gt; as well as to &lt;a href=&quot;http://sequence.complete.org/&quot;&gt;the
   Haskell Sequence&lt;/a&gt; and &lt;a href=&quot;http://planet.haskell.org/&quot;&gt;Planet
   Haskell&lt;/a&gt;.  &lt;a href=&quot;http://sequence.complete.org/node/feed&quot;&gt;RSS&lt;/a&gt;
   is also available, and headlines appear on &lt;a href=&quot;http://haskell.org&quot;&gt;haskell.org&lt;/a&gt;. Headlines are available as &lt;a href=&quot;http://code.haskell.org/~byorgey/code/hwn/archives/20080702.pdf&quot;&gt;PDF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To help create new editions of this newsletter, please
   see the information on &lt;a href=&quot;http://haskell.org/haskellwiki/HWN&quot;&gt;how
   to contribute&lt;/a&gt;. Send stories to &lt;code&gt;byorgey at seas dot upenn
   dot edu&lt;/code&gt;.  The darcs repository is available at &lt;code&gt;darcs get &lt;a href=&quot;http://code.haskell.org/~byorgey/code/hwn/&quot;&gt;http://code.haskell.org/~byorgey/code/hwn/&lt;/a&gt;
   .&lt;/code&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 02 Jul 2008 19:57:47 +0000</pubDate>
	<dc:creator>byorgey</dc:creator>
</item>
<item>
	<title>Antti-Juhani Kaijanaho (ibid): A reader’s meme</title>
	<guid isPermalink="false">http://antti-juhani.kaijanaho.fi/newblog/?p=297</guid>
	<link>http://antti-juhani.kaijanaho.fi/newblog/archives/297</link>
	<description>&lt;p&gt;From &lt;a href=&quot;http://www.bostonbibliophile.com/2008/07/tuesday-thingers.html&quot;&gt;Tuesday thingers&lt;/a&gt;, via &lt;a href=&quot;http://julesjones.livejournal.com/258653.html&quot;&gt;Jules Jones&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Here is the Top 100 Most Popular Books on LibraryThing. Bold what you own, italicize what you&amp;#8217;ve read. Star what you liked. Star multiple times what you loved!
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt; &lt;a href=&quot;http://antti-juhani.kaijanaho.fi/newblog/archives/297#more-297&quot; class=&quot;more-link&quot;&gt;(more&amp;#8230;)&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 02 Jul 2008 17:46:52 +0000</pubDate>
	<dc:creator>Antti-Juhani Kaijanaho</dc:creator>
</item>
<item>
	<title>Roman Cheplyaka: V-Clip seems to work!</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-1731449971700063597.post-5408679695798541920</guid>
	<link>http://physics-dph.blogspot.com/2008/07/v-clip-seems-to-work.html</link>
	<description>&lt;p&gt;Finally, I've got V-Clip working. At least now (after one bugfix) it always terminates -- quite encouraging for such algorithm!&lt;/p&gt;
&lt;pre&gt;*Properties&gt; quickCheck prop_VClipTerminates 
OK, passed 100 tests.
32% Done, (&quot;Edge&quot;,&quot;Edge&quot;).
14% Done, (&quot;Edge&quot;,&quot;Vertex&quot;).
11% Done, (&quot;Vertex&quot;,&quot;Edge&quot;).
10% Done, (&quot;Face&quot;,&quot;Vertex&quot;).
8% Penetration, (&quot;Face&quot;,&quot;Vertex&quot;).
8% Done, (&quot;Vertex&quot;,&quot;Face&quot;).
7% Done, (&quot;Vertex&quot;,&quot;Vertex&quot;).
5% Penetration, (&quot;Vertex&quot;,&quot;Face&quot;).
3% Penetration, (&quot;Face&quot;,&quot;Edge&quot;).
2% Penetration, (&quot;Edge&quot;,&quot;Face&quot;).
&lt;/pre&gt;
&lt;p&gt;The next step in testing will be visualizing cubes collisions -- and I'm still moving towards rotation!&lt;/p&gt;</description>
	<pubDate>Wed, 02 Jul 2008 01:00:52 +0000</pubDate>
	<dc:creator>Roman Cheplyaka (noreply@blogger.com)</dc:creator>
</item>
<item>
	<title>Joel Reymont: Mnesia Unlimited</title>
	<guid isPermalink="false">tag:typepad.com,2003:post-51729014</guid>
	<link>http://feeds.feedburner.com/~r/TenerifeSkunkworks/~3/318097883/mnesia-unlimited.html</link>
	<description>&lt;p&gt;Mnesia is the Erlang embbedded distributed DBMS, that supports high scalability and fault tolerance through replication. Mnesia has been used to great success in all kinds of applications but it's not without &lt;a href=&quot;http://www.erlang-consulting.com/thesis/dbms_eval.html&quot;&gt;limitations&lt;/a&gt;. The limitations mainly stem from the underlying ETS and DETS mechanisms used to implement Mnesia tables. &lt;/p&gt;

&lt;p&gt;There have been &lt;a href=&quot;http://www.snookles.com/erlang/edtk/EDTK_BerkeleyDB.ppt&quot;&gt;attempts&lt;/a&gt; to &lt;a href=&quot;http://ulf.wiger.net/weblog/2006/03/07/rdbms-beta-testing/&quot;&gt;hack around&lt;/a&gt; Mnesia limitations before, e.g I wrote a Mnesia backend for Amazon S3 just last summer. All these attempts to add external table functionality to Mnesia suffered from being hard to extend, or were closed source implementations. &lt;/p&gt;

&lt;p&gt;Thanks to the &lt;a href=&quot;http://dukesoferl.blogspot.com/&quot;&gt;Dukes of Erl&lt;/a&gt;, I finally got a chance to do a proper Mnesia extension, the one to rule them all! The result is a series of about 50 careful git patches that support all the features of regular Mnesia tables such as indexing, replication, distribution, fragmentation and backup, as well as set or bag semantics. Best of all, this functionality is available to anyone using OTP release R11B5. &lt;/p&gt;

&lt;p&gt;The external table API is supplied as an Erlang behavior so all you need to do is supply a callback module that conforms to it. &lt;/p&gt;

&lt;p&gt;You can now use Mnesia as a front-end to disk-based hash tables like SleepyCat/BerkeleyDB or &lt;a href=&quot;http://tokyocabinet.sourceforge.net/spex-en.html&quot;&gt;Tokyo Cabinet&lt;/a&gt;, a memory-mapped table or a relational database like MySQL.&lt;/p&gt;

&lt;p&gt;You are no longer constrained by the scalability or size limitations of ETS and DETS so go wild and let me know what you come up with. Oh, and please petition the Erlang/OTP team to include this work in the official Erlang distribution!&lt;/p&gt;

&lt;p&gt;Mnesia 4.3.5 with the extension mechanism is available from &lt;a href=&quot;http://code.google.com/p/mnesiaex/&quot;&gt;Google Code&lt;/a&gt; and so is the &lt;a href=&quot;http://code.google.com/p/tcerl/&quot;&gt;Tokyo Cabinet external table&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?a=r8ZAeI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?i=r8ZAeI&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?a=Cfwk2i&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?i=Cfwk2i&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?a=HXdv2i&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?i=HXdv2i&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?a=mOZfnI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?i=mOZfnI&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?a=7rLHKi&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~f/TenerifeSkunkworks?i=7rLHKi&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TenerifeSkunkworks/~4/318097883&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 01 Jul 2008 12:07:39 +0000</pubDate>
	<dc:creator>Joel Reymont</dc:creator>
</item>
<item>
	<title>John Goerzen (CosmicRay): Linux on the Desktop</title>
	<guid isPermalink="false">http://changelog.complete.org/posts/726-guid.html</guid>
	<link>http://changelog.complete.org/posts/726-Linux-on-the-Desktop.html</link>
	<description>Later this month, I will be giving &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/2509&quot;&gt;a talk&lt;/a&gt; at &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/content/home&quot;&gt;OSCon&lt;/a&gt; about Linux on the corporate desktop -- something we have done where I work.  I've been alloted a 45-minute timeslot.  I will, of course, be posting my slides online and I think OSCon also posts videos of these things.&lt;br /&gt;
&lt;br /&gt;
I'm wondering if readers of my blog would like to leave me some comments on what you'd like to see.  What would you like to know about Linux on the corporate desktop?  Is there anything that you'd like to make sure I discuss?</description>
	<pubDate>Tue, 01 Jul 2008 11:58:00 +0000</pubDate>
	<dc:creator>nospam@example.com (John Goerzen)</dc:creator>
</item>
<item>
	<title>Luke Palmer: Apparently I do not want to be in Antwerp</title>
	<guid isPermalink="false">http://luqui.org/blog/?p=560</guid>
	<link>http://luqui.org/blog/archives/2008/07/01/apparently-i-do-not-want-to-be-in-antwerp/</link>
	<description>&lt;p&gt;Because &lt;i&gt;VISA&lt;/i&gt; is not here!  It was a bit distressing coming here with only 15&amp;euro; in my pocket and finding out that people don&amp;#8217;t take credit cards the way everybody does in the USA.  Anyway, there was a bank that understood my card and could give me cash.&lt;/p&gt;
&lt;p&gt;This is my first time out of the USA (barring Canada), so I&amp;#8217;m enjoying observing the differences.  Although there are some interesting points, it&amp;#8217;s more similar than I expected.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The outlets are those weird european ones, so I can&amp;#8217;t plug in my computer (without ganking an adapter from a coworker).  I was going to go to a store and buy one, but&lt;/li&gt;
&lt;li&gt;Stores close at or around 17:00!  How am I supposed to satisfy my electronics craving after dinner?&lt;/li&gt;
&lt;li&gt;People write times in 24-hour format, there&amp;#8217;s no AM/PM.&lt;/li&gt;
&lt;li&gt;There is a different meme at stoplights on foot.  In the USA, each person or group of people presses the button.  Here, it seems that people only press the button if there&amp;#8217;s nobody already waiting.  That is, they trust people to have already pushed it&amp;#8230; which makes sense.&lt;/li&gt;
&lt;li&gt;I always like trying new weird food.  This is made easier when one cannot read the menus.&lt;/li&gt;
&lt;li&gt;&amp;#8220;Met&amp;#8221; means &amp;#8220;with&amp;#8221; in Dutch.  Other words have other meanings.&lt;/li&gt;
&lt;li&gt;A glass of water costs 1.50&amp;euro; at restaurants.  That could be related to the fact that tap water in this country is not what I would consider drinkable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;#8217;s actually not that hard to get around not being able to read anything.  It&amp;#8217;s fun being here.&lt;/p&gt;</description>
	<pubDate>Tue, 01 Jul 2008 07:27:03 +0000</pubDate>
	<dc:creator>Luke Palmer</dc:creator>
</item>
<item>
	<title>"Osfameron": Blog move</title>
	<guid isPermalink="false">tag:vox.com,2008-06-30:asset-6a00c225240a9af21900fad696537b0004</guid>
	<link>http://osfameron.vox.com/library/post/blog-move.html?_c=feed-atom</link>
	<description>&lt;div&gt;
         I've enjoyed using Vox.com over the last couple of months but I'm finally taking the plunge and moving the blog to greenokapi.net/blog.   Though I've occasionally wanted more flexibility, the trade-off with a hosted service is that you waste no ti...   &lt;p&gt; 
    &lt;a href=&quot;http://osfameron.vox.com/library/post/blog-move.html?_c=feed-atom#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00c225240a9af21900fad696537b0004?_c=feed-atom&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;

                &lt;/div&gt;</description>
	<pubDate>Mon, 30 Jun 2008 22:51:30 +0000</pubDate>
	<dc:creator>osfameron</dc:creator>
</item>
<item>
	<title>Philip Wadler: Welcome to Scotland, Neil, Patricia, and Conor!</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-9757377.post-1772374557811165122</guid>
	<link>http://wadler.blogspot.com/2008/06/welcome-to-scotland-neil-patricia-and.html</link>
	<description>A big welcome to Neil Ghani, Patricia Johann, and Conor McBride, who are establishing a new research group in Mathematically Structured Programming at the University of Strathclyde.  And a big congratulations to Strathclyde, on attracting three top-notch researchers.  Their arrival will strengthen the already strong programming languages community in Scotland, and they've already volunteered to host a meeting of &lt;a href=&quot;http://www.dcs.gla.ac.uk/research/spls/&quot;&gt;SPLS&lt;/a&gt;.</description>
	<pubDate>Mon, 30 Jun 2008 14:46:39 +0000</pubDate>
	<dc:creator>Philip Wadler (noreply@blogger.com)</dc:creator>
</item>
<item>
	<title>Philip Wadler: Fractal Food</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-9757377.post-3013705231639435153</guid>
	<link>http://wadler.blogspot.com/2008/04/fractal-food.html</link>
	<description>&lt;a href=&quot;http://farm4.static.flickr.com/3257/2400413026_f2f3635eb9.jpg&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3257/2400413026_f2f3635eb9.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Who can resist&lt;br /&gt;&lt;a href=&quot;http://www.evilmadscientist.com/article.php/fractalcookies&quot;&gt;Sierpinski cookies&lt;/a&gt; and &lt;a href=&quot;http://www.urbanhonking.com/digest/archives/2006/06/fractal_pizza.html&quot;&gt;fractal pizza&lt;/a&gt;?  Spotted via Boing Boing.</description>
	<pubDate>Mon, 30 Jun 2008 14:37:46 +0000</pubDate>
	<dc:creator>Philip Wadler (noreply@blogger.com)</dc:creator>
</item>
<item>
	<title>Conrad Parker: FOMS 2009 CFP</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-9101292118679422945.post-8408668104925942601</guid>
	<link>http://blog.kfish.org/2008/06/foms-2009-cfp.html</link>
	<description>&lt;p&gt;We recently opened the
&lt;a href=&quot;http://www.foms-workshop.org/foms2009/pmwiki.php/Main/CFP&quot;&gt;FOMS 2009 Call for Participation&lt;/a&gt;. FOMS &amp;mdash; Foundations of Open Media Software &amp;mdash; is a developer workshop &quot;to widen cooperation and interoperability among open source media projects&quot;. It will be held a few days before &lt;a href=&quot;http://linux.conf.au/&quot;&gt;linux.conf.au&lt;/a&gt;, in Hobart, Tasmania.
&lt;/p&gt;
&lt;p&gt;
This year's FOMS had a large emphasis on
&lt;a href=&quot;http://blog.kfish.org/2008/02/foms-lca-2008-roundup.html&quot;&gt;free codecs&lt;/a&gt;, with many of the Xiph.Org developers in attendance.
In 2009 we really hope to expand the participation to include people from projects with alternate technical viewpoints, such as those of
&lt;a href=&quot;http://www.mplayerhq.hu&quot;&gt;MPlayer&lt;/a&gt; and &lt;a href=&quot;http://nut-container.org/&quot;&gt;NUT&lt;/a&gt;. It would also be good to get some exposure to projects like
&lt;a href=&quot;http://openbossa.indt.org/canola/&quot;&gt;Canola2&lt;/a&gt; and
&lt;a href=&quot;http://omxil.sourceforge.net/&quot;&gt;Bellagio&lt;/a&gt;, in order to deal with the issues of mobile multimedia. If you're involved in development of those or similar projects and would be interested in attending FOMS 2009, please respond to the CFP; there will be some travel grants available to help get you to Tasmania.
&lt;/p&gt;

&lt;b&gt;Related conferences&lt;/b&gt;

&lt;ul&gt;
&lt;li&gt;I'll be at &lt;a href=&quot;http://linuxplumbersconf.org/&quot;&gt;Linux Plumbers Conference&lt;/a&gt; 2008 in Portland, Oregon, specifically for the &quot;Audio&quot; microconf.&lt;/li&gt;
&lt;li&gt;We hope to run a Multimedia Miniconf at LCA 2009 :-)&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Mon, 30 Jun 2008 12:01:01 +0000</pubDate>
	<dc:creator>Conrad Parker (noreply@blogger.com)</dc:creator>
</item>
<item>
	<title>André Pang (ozone): Talks for 2008</title>
	<guid isPermalink="false">http://www.algorithm.com.au/blog/files/2008-talk-slides.php#unique-entry-id-591</guid>
	<link>http://www.algorithm.com.au/blog/files/2008-talk-slides.php#unique-entry-id-591</link>
	<description>&lt;p&gt;I&amp;#8217;ve given a few talks so far this year, which I&amp;#8217;ve been kinda slack about and haven&amp;#8217;t put up any slides for yet.  So, if you&amp;#8217;re one of the zero people who&amp;#8217;ve been eagerly awaiting my incredibly astute and sexy opinions, I guess today&amp;#8217;s your lucky day, punk!&lt;/p&gt;

&lt;p&gt;Earlier this year, on January 2, 2008, Earth Time, I gave a talk at &lt;a href=&quot;http://en.wikipedia.org/wiki/Kiwi_Foo_Camp&quot;&gt;Kiwi Foo Camp&lt;/a&gt; in New Zealand, also known as Baa Camp.  (Harhar, foo, baa, get it?)  The talk was titled &amp;#8220;Towards the Massive Media Matrix&amp;#8221;, with the &lt;span class=&quot;caps&quot;&gt;MMM &lt;/span&gt;in the title being a pun on the whole &lt;span class=&quot;caps&quot;&gt;WWW &lt;/span&gt;three-letter acronym thing.  (Credit for the &lt;span class=&quot;caps&quot;&gt;MMM &lt;/span&gt;acronym should go to &lt;a href=&quot;http://blog.gingertech.net/&quot;&gt;Silvia Pfeiffer&lt;/a&gt; and &lt;a href=&quot;http://www.vergenet.net/~conrad/&quot;&gt;Conrad Parker&lt;/a&gt;, who phrased the term about eight years ago :).  The talk was about the importance of free and open standards on the Web, what&amp;#8217;s wrong with the current status quo about Web video basically being Flash video, and the complications involved in trying to find a solution that satisfies everyone.  I&amp;#8217;m happy to announce that the slides for the talk are &lt;a href=&quot;http://www.algorithm.com.au/downloads/talks/towards-the-massive-media-matrix/towards-the-massive-media-matrix.pdf&quot;&gt;now available for download&lt;/a&gt;; you can also grab the details off my &lt;a href=&quot;http://www.algorithm.com.au/talks&quot;&gt;talks&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;A bit later this year in March, &lt;a href=&quot;http://www.cse.unsw.edu.au/~chak/&quot;&gt;Manuel Chakravarty&lt;/a&gt; and I were invited to the &lt;a href=&quot;http://groups.google.com/group/fp-syd&quot;&gt;fp-syd&lt;/a&gt; functional programming user group in Sydney, to give a talk about&amp;#8230; monads!  As in, that scary Haskell thing.  We understand that writing a monad tutorial seems to be a rite of passage for all Haskell programmers and was thus stereotypical of the &amp;#8220;Haskell guys&amp;#8221; in the group to give a talk about, but the talk seemed to be well-received.&lt;/p&gt;

&lt;p&gt;Manuel gave a general introduction to monads: what they are, how to use them, and why they&amp;#8217;re actually a good thing rather than simply another hoop you have to jump through if you just want to do some simple I/O in Haskell.  I focused on a practical use case of monads that &lt;em&gt;didn&amp;#8217;t&lt;/em&gt; involve I/O (OMG!), giving a walkthrough on how to use Haskell&amp;#8217;s excellent Parsec library to perform parsing tasks, and why you&amp;#8217;d want to use it instead of writing a recursive descent parser yourself, or resort to the insanity of using &lt;a href=&quot;http://dinosaur.compilertools.net/&quot;&gt;&lt;em&gt;lex&lt;/em&gt; and &lt;em&gt;yacc&lt;/em&gt;&lt;/a&gt;.  I was flattered to find out that after my talk, Ben Leppmeier rewrote the parser for &lt;span class=&quot;caps&quot;&gt;DDC &lt;/span&gt;(the &lt;a href=&quot;http://www.haskell.org/haskellwiki/DDC&quot;&gt;Disciplined Disciple Compiler&lt;/a&gt;) to use Parsec, rather than his old system of Alex and Happy (Haskell&amp;#8217;s equivalents of lex and yacc).  So, I guess I managed to make a good impression with at least one of our audience members, which gave me a nice warm fuzzy feeling.&lt;/p&gt;

&lt;p&gt;You can find both Manuel&amp;#8217;s and my slides online at the &lt;a href=&quot;http://groups.google.com/group/fp-syd/files&quot;&gt;Google Groups files page for fp-syd&lt;/a&gt;, or you can &lt;a href=&quot;http://www.algorithm.com.au/downloads/talks/monads-are-not-scary/&quot;&gt;download the slides directly&lt;/a&gt; from my own site.  Enjoy.&lt;/p&gt;

&lt;p&gt;Finally, during my three-week journey to the &lt;span class=&quot;caps&quot;&gt;USA &lt;/span&gt;last month in June, I somehow got roped into giving a talk at &lt;a href=&quot;http://galois.com/&quot;&gt;Galois Inc.&lt;/a&gt; in Portland, about pretty much whatever I wanted.  Since the audience was, once again, a Haskell and functional programming crowd, I of course chose to give a talk about an object-oriented language instead: &lt;a href=&quot;http://en.wikipedia.org/wiki/Objective-C&quot;&gt;Objective-C&lt;/a&gt;, the lingua franca of Mac OS X development.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re a programming language geek and don&amp;#8217;t know much about Objective-C, the talk should hopefully interest you.  Objective-C is a very practical programming language that has a number of interesting features from a language point of view, such as &lt;a href=&quot;http://chanson.livejournal.com/176390.html&quot;&gt;opt-in garbage collection&lt;/a&gt;, and a hybrid of a dynamically typed runtime system with static type checking.  If you&amp;#8217;re a Mac OS X developer, there&amp;#8217;s some stuff there about the internals of the Objective-C object and runtime system, and a few slides about &lt;a href=&quot;http://www.macdevcenter.com/pub/a/mac/2004/07/16/hom.html&quot;&gt;higher-order messaging&lt;/a&gt;, which brings much of the expressive power of higher-order functions in other programming languages to Objective-C.  Of course, if you&amp;#8217;re a Mac OS X developer &lt;em&gt;and&lt;/em&gt; a programming language geek, well, this should be right up your alley :).  Once again, you can &lt;a href=&quot;http://www.algorithm.com.au/downloads/talks/mac-os-x-linguistics/mac-osx-linguistics.pdf&quot;&gt;download the slides directly&lt;/a&gt;, or off my &lt;a href=&quot;http://www.algorithm.com.au/talks&quot;&gt;talks&lt;/a&gt; page.&lt;/p&gt;</description>
	<pubDate>Mon, 30 Jun 2008 09:49:29 +0000</pubDate>
	<dc:creator>ozone@algorithm.com.au</dc:creator>
</item>
<item>
	<title>Nick Mudge: First-Pass Arithmetic Parser</title>
	<guid isPermalink="false">http://nickmudge.info?post=96</guid>
	<link>http://nickmudge.info?post=96</link>
	<description>&lt;p&gt;
I recently wrote a parser in C that parses arthmetic expressions. It's a stepping stone towards creating the parser for the compiler I'm working on. It takes as input a string that consists of an equation. It reads the string once while creating a graph data structure. The data structure can then be traversed with the &quot;parse&quot; function to make all the calculations in the correct order and arrive at the answer.
&lt;/p&gt;
&lt;p&gt;
After it is compiled, it is ran like this: ./parser &quot;var = 77 + 3 / 2 + 90 * 100;&quot;
&lt;/p&gt;
&lt;p&gt;
I made a little web interface for it that just takes an expression, passes the expression to the parser and then outputs the result from the parser to the webpage: &lt;a href=&quot;http://nickmudge.info/c/arithmetic_parser/arith.php&quot;&gt;http://nickmudge.info/c/arithmetic_parser/arith.php&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Here's the C code:&lt;br /&gt;
&lt;a href=&quot;http://nickmudge.info/c/arithmetic_parser/parser.c&quot;&gt;parser.c&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://nickmudge.info/c/arithmetic_parser/scanner.c&quot;&gt;scanner.c&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://nickmudge.info/c/arithmetic_parser/symbol_table.c&quot;&gt;symbol_table.c&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Next Steps&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Right now the parser reads its input starting from the right, moving to the left. I want to rewrite some code to make it read from left to right. Providing syntax error information will be easier to do if it reads from left to right.&lt;/li&gt;
&lt;li&gt;
Add parentheses to the language.
&lt;/li&gt;
&lt;li&gt;
Start adding more programming language constructs.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I think the compiler is going to implement ANSI C. This is part of the operating system I said I was going to write.
&lt;/p&gt;</description>
	<pubDate>Mon, 30 Jun 2008 02:00:17 +0000</pubDate>
</item>
<item>
	<title>Mark Jason Dominus: Freshman electromagnetism questions: answer 3</title>
	<guid isPermalink="false">tag:blog.plover.com,2008:/physics/em-questions-3</guid>
	<link>http://blog.plover.com/physics/em-questions-3.html</link>
	<description>Last year &lt;a href=&quot;http://blog.plover.com/physics/em-questions.html&quot;&gt;I asked a bunch
of basic questions about electromagnetism&lt;/a&gt;.  Many readers wrote in with
answers and explanations, which I still hope to write up in detail.
In the meantime, however, I figured out the answer to one of the
questions by myself.&lt;p&gt;

I had asked:&lt;p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li value=&quot;3&quot;&gt; Any beam of light has a time-varying electric field, perpendicular
   to the direction that the light is travelling.  If I shine a light
   on an electron, why doesn't the electron vibrate up and down in the
   varying electric field?  Or does it?&lt;p&gt;
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;/blockquote&gt;

And one day a couple of months ago it occurred to me that yes, of
course the
electron vibrates up and down, because that is how radio antennas
work.  The EM wave comes travelling by, and the electrons bound in the
metal antenna vibrate up and down.  When electrons vibrate up and down in
a metal wire, it is called an alternating current.  Some gizmo at the
bottom end of the antenna detects the alternating current and turns it
back into the voice of Don Imus.&lt;p&gt;

I thought about it a little more, and I realized that this vibration
effect is also how microwave ovens work.  The electromagnetic
microwave comes travelling by, and it makes the electrons in the
burrito vibrate up and down.  But these electrons are bound into water
molecules, and cannot vibrate freely.  Instead, the vibrational energy
is dissipated as heat, so the burrito gets warm.&lt;p&gt;

So that's one question out of the way.  Probably I have at least three
reader responses telling me this exact same thing.  And perhaps
someday we will all find out together...&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 29 Jun 2008 07:34:00 +0000</pubDate>
	<dc:creator>Mark Dominus</dc:creator>
</item>
<item>
	<title>John Goerzen (CosmicRay): A response to &quot;7 Ways Religion is Detrimental to Science&quot;</title>
	<guid isPermalink="false">http://changelog.complete.org/posts/725-guid.html</guid>
	<link>http://changelog.complete.org/posts/725-A-response-to-7-Ways-Religion-is-Detrimental-to-Science.html</link>
	<description>I read &lt;a href=&quot;http://www.blank89.net/2008/06/7-ways-religion-is-detrimental-to-science/&quot;&gt;7 Ways Religion is Detrimental to Science&lt;/a&gt;, and thought it would be an interesting read.  It was, but I don't think it really made sense.  Let's look at the 7 ways they highlighted:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Faith and the Scientific Method are Opposites&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The article states:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Faith is a belief in an idea regardless of the evidence for or against it.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Actually, that's not true at all, at least for traditional Christianity.  (Note that traditional Christianity is not the same as fundamentalism).  Marcus J. Borg describes faith in four ways:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Fiducia&lt;/i&gt; -- trusting in God.  Borg says, &quot;Faith . . . [means] we trust in God as the one upon whom we rely, as our support and foundation and ground, as our safe place.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Fidelitas&lt;/i&gt; -- loyalty, or &quot;the comment of the self at its deepest level, the commitment of the 'heart'.  Faith as &lt;i&gt;fidelitas&lt;/i&gt; does not mean faithfulness to &lt;i&gt;statements&lt;/i&gt; about God. . . &lt;i&gt;Fidelitas&lt;/i&gt; refers to a radical centering in God.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Visio&lt;/i&gt; -- a way of seeing -- &quot;a way of seeing the whole, a way of seeing 'what is'. . . the ability to love and to be present to the moment.  It generates a 'willingness to spend and be spent' for the sake of a vision that goes beyond ourselves.&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Assensus&lt;/i&gt; -- perhaps the closest to what the author meant, is &quot;faith as belief.&quot;  Borg goes on to add:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;The notion that Christian faith is primarily . . . about belief, about a &quot;head&quot; matter, is recent. . . For many, Christian faith began to mean believing questionable things to be true. . . this is the most widespread contemporary understanding of &quot;belief&quot;.&lt;br /&gt;
&lt;br /&gt;
This is very different from what faith as &lt;i&gt;assensus&lt;/i&gt; meant. . . A deep but humble (and therefore imprecise) understanding of Christian faith as &lt;i&gt;assensus&lt;/i&gt;, as involving affirmation of the centrality of God as known in the Bible and Jesus, is very close to faith as &lt;i&gt;vision&lt;/i&gt;.  It is a way of seeing reality.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
As a Christian, I do not find the scientific method to be a problem.  I find it to be enlightening in all sorts of matters, including even the history of religion in some instances.  Christian faith is not about believing in certain ideas (such as the world being created in 6 literal 24-hour days), though there are those that distort it to be so.  Rather, Christian faith is about living your life a certain way, about the meaning of life, about our duties to make the world a better place.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. People Vote Base on Religious Ideas&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The author says that &quot;Stem Cells weren’t the first time a body of research didn’t get proper funding because some religious wack-jobs.&quot;  Well, I agree that that was a problem.  Non-religious people can vote in odd ways too.  I argue that the rejection of stem-cell research goes against Christian teaching; after all, we are to help the least among us, and do not people with Alzheimer's qualify?&lt;br /&gt;
&lt;br /&gt;
I think the author's point should have been &quot;exremists have odd views.&quot;  Extremists can be atheist, Christian, Muslim, Buddhist, or other religions.  Religion does not have a monopoly on them.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Religion Removes the Need For Science&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The author says:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;When people are content to believe in something that explains why they are here, even if it is wrong, they become less interested in other ideas. Religion often leads people to believe that they have all the answers. Science is self-correcting in that nobody assumes they are absolutely correct.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
That is incorrect on several levels.  First, science cannot explain why we are here.  It can explain some of the mechanics.  As an example, let us take for granted that modern scientific thought on the origin of humanity is correct: that there was a Big Bang, that single-celled creatures evolved on earth, and that human life eventually evolved through a complex process of evolution and natural selection.  Fine; this does not contradict religion in any way.  Science and religion answer different questions.  Science answers &quot;how&quot;.  Religion answers &quot;why&quot;.  Science cannot answer the question &quot;Why was there a big bang?&quot; or &quot;Did the evolution of humanity serve a larger purpose?&quot;&lt;br /&gt;
&lt;br /&gt;
Moreover, religion should not assume that they have all the answers, either.  The canonical Christian Bible was mostly fixed within a few centuries AD.  Life in 200AD was a lot different from life today.  Part of the reason there are many different groups of Christians is the complexity of applying the stories in the Bible to modern life.  The ideas in any given denomination evolve over time, too.  I think it would be the height of hubris for anyone, religious or not, to claim that he or she had all the answers.  Again, I know that some religious people act that way, but then so do some atheists or agnostics.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. People Lean on Religion, When They Could Benefit From Science&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The author of &quot;7 Ways&quot; cites the quite rare case where a child dies of a curable disease while his/her parents pray, refusing medical care.  This is an extreme position that is not shared by the vast majority of religious people.  Most religious people are perfectly content to use the latest medical care.&lt;br /&gt;
&lt;br /&gt;
Meditation or prayer does not replace medical care; it supplements it.  Scientific studies have even demonstrated its effectiveness.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5. The Church Takes Up Natural Resources&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The original author states that &quot;The land that churches take up around the world could be used to build schools, homes, recreational buildings and commercial operations.&quot;  This is perhaps the most frivolous of arguments.  Putting aside the fact that many churches operate schools, churches are often one of the few ways that modern city dwellers have to form a sense of community.  They are not just places to engage in religion.  They are places to meditate, to get away from it all, to meet your neighbors, to vote.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6. The Church Takes Up Monetary Resources&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The original author says &quot;if people donated to scientific advancement like they did to the church, imagine where we would be today.&quot;  It's not a pleasant picture.  Religion, and institutions supported primarily because of the teaching of religion, are the people that feed the hungry after natural disasters, that operate food pantries (our church operates the only one in our community, and it's open to anyone without any questions or talk about religion), that operate schools in disadvantaged areas, that have spread the whole idea of fair trade for third-world artisans, etc.&lt;br /&gt;
&lt;br /&gt;
It is true that acts of evil have been committed in the name of the church, too.  It is also unquestionably true that some church groups spend money more carefully than others.  As with any donation, people should be careful where they give.  Government-operated research studies are not necessarily a good use of money, either.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7. Religion is A Strong Meme&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The author of the original story seems to be responding to a particular brand of Christianity: what Borg calls &quot;literal-factual&quot; religion.  There are quite a few people that take that stand.  They are sometimes inaccurately referred to as &quot;evangelicals&quot; or the &quot;religious right&quot;; while there is some overlap between the groups, they are not one and the same.  The people with the literal-factual view are not representative of the whole.&lt;br /&gt;
&lt;br /&gt;
More interestingly, Borg points out that the literal-factual view was actually a response to the development of the scientific method during the Enlightenment.  As the modern idea of truth moved to literal, factual, provable truth, some Christians grew defensive about their faith, and started to look for &quot;scientific&quot; ways to prove that the world was created in 6 days, etc. in an attempt to show the world that Christianity fit their new notion of truth.&lt;br /&gt;
&lt;br /&gt;
That makes a compelling argument that the scientific method is the stronger meme in today's Western world -- so strong that the author of the rant against religion has apparently forgotten the more prevalant -- both throughout history and today -- view of Christianity that is &quot;more than&quot; Science, not at odds with science.</description>
	<pubDate>Sun, 29 Jun 2008 03:24:46 +0000</pubDate>
	<dc:creator>nospam@example.com (John Goerzen)</dc:creator>
</item>
<item>
	<title>Dan Piponi (sigfpe): A blessed man's formula for holey containers</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-11295132.post-1567481220139192774</guid>
	<link>http://sigfpe.blogspot.com/2008/06/blessed-mans-formula-for-holey.html</link>
	<description>I love the way &lt;a href=&quot;http://strictlypositive.org/diff.pdf&quot;&gt;derivatives of types&lt;/a&gt; tell you about holes in containers. It works the other way too and holes can give insight into derivatives.&lt;br /&gt;&lt;br /&gt;Suppose S and T are containers so that S(X) and T(X) are containers of elements of type X. Then S(T(X)) is an S-container of T-containers of X's. If we draw S as a square (rectangle actually) and T as a triangle then we can draw a picture of an example of such a thing:&lt;br /&gt;&lt;a href=&quot;http://bp1.blogger.com/_UdKHLrHa05M/SGajEzACLxI/AAAAAAAAAJM/Sd_hPfHnOtc/s1600-h/S+of+Ts.png&quot;&gt;&lt;img src=&quot;http://bp1.blogger.com/_UdKHLrHa05M/SGajEzACLxI/AAAAAAAAAJM/Sd_hPfHnOtc/s400/S+of+Ts.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5217036521160453906&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Taking the nth derivative of a type gives the type with (an ordered sequence of) n holes. Here's that previous container with 3 holes made in it:&lt;br /&gt;&lt;a href=&quot;http://bp3.blogger.com/_UdKHLrHa05M/SGbAvPuHWvI/AAAAAAAAAJ0/Q2gKcUox4Ac/s1600-h/S+of+Ts+with+holes.png&quot;&gt;&lt;img src=&quot;http://bp3.blogger.com/_UdKHLrHa05M/SGbAvPuHWvI/AAAAAAAAAJ0/Q2gKcUox4Ac/s400/S+of+Ts+with+holes.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5217069136261634802&quot; /&gt;&lt;/a&gt;&lt;br /&gt;As the holes have an ordering I've numbered them from 1 to 3.&lt;br /&gt;&lt;br /&gt;An S-container of T-containers with holes is essentially an S-container containing both ordinary T-containers, and some T-containers with holes. If we excise the T-containers with holes, we're left with an S-container containing just T-containers, and some holes. Here's a picture of that:&lt;br /&gt;&lt;a href=&quot;http://bp2.blogger.com/_UdKHLrHa05M/SGa-RRMNGAI/AAAAAAAAAJk/vu2-MP2jWKI/s1600-h/S+of+Ts+decomposed.png&quot;&gt;&lt;img src=&quot;http://bp2.blogger.com/_UdKHLrHa05M/SGa-RRMNGAI/AAAAAAAAAJk/vu2-MP2jWKI/s400/S+of+Ts+decomposed.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5217066422236944386&quot; /&gt;&lt;/a&gt;&lt;br /&gt;But there are a couple of problems with that. Once we've excised the holey sub T-containers we don't know which S-holes to plug them back into and we don't know how to reconstruct the original numbering of the holes. We need to keep a tiny bit more information. That's the set I wrote down: {{1,3},{2}}. Call each element of this set a block. I've written the elements of the blocks in ascending order and I've written the blocks in ascending order of their lowest elements. The first block corresponds to hole 1 in the S-container and the second block corresponds to hole 2. Similarly, we write the elements of the blocks into the holes in the T-containers. And that allows us to reconstruct the original ST-container.&lt;br /&gt;&lt;br /&gt;Think about the general case. We make n holes in an ST-container. So up to n of the T-containers acquire holes. Let's say it's m holes. We can think of the S-container having m holes and these holes being filled by T-containers with b&lt;sub&gt;1&lt;/sub&gt;, b&lt;sub&gt;2&lt;/sub&gt;,...,b&lt;sub&gt;m&lt;/sub&gt; holes where the sum of the b&lt;sub&gt;i&lt;/sub&gt; is n. We're essentially just partitioning the original n holes {1,2,...,n} into m sets. So each ST-container with n holes gives a partition of {1,...,n}, an S-container with n holes, and m T-containers where the ith has b&lt;sub&gt;i&lt;/sub&gt; holes. Writing containers with n holes as nth derivatives we get&lt;br /&gt;&lt;blockquote&gt;d&lt;sup&gt;n&lt;/sup&gt;(F(G(X))/dX&lt;sup&gt;n&lt;/sup&gt; = sum over each partition P of {1,...,n} of d&lt;sup&gt;|P|&lt;/sup&gt;F/dG&lt;sup&gt;|P|&lt;/sup&gt; times the product over each block B in P of d&lt;sup&gt;|B|&lt;/sup&gt;F/dX&lt;sup&gt;|B|&lt;/sup&gt;&lt;/blockquote&gt;&lt;br /&gt;Note that the equality above isn't just a numerical equality, it's an isomorphism of types. In fact, it's the type version of the 'combinatorial form' of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Faà_di_Bruno's_formula#Combinatorial_form&quot;&gt;Fa&amp;agrave; di Bruno formula&lt;/a&gt;. Although that wikipedia page describes the formula as 'forbidding', if I've done my job right then I think the above picture make it seem almost trivial. I find it much easier to think of this version of the chain rule in terms of holes.&lt;br /&gt;&lt;br /&gt;And the explanation for the title of this post: in 1988 Pope John Paul II beatified Faà di Bruno.</description>
	<pubDate>Sat, 28 Jun 2008 20:38:00 +0000</pubDate>
	<dc:creator>noreply@blogger.com (sigfpe)</dc:creator>
</item>
<item>
	<title>Roman Cheplyaka: Status report: week 5</title>
	<guid isPermalink="false">tag:blogger.com,1999:blog-1731449971700063597.post-1038955908033111351</guid>
	<link>http://physics-dph.blogspot.com/2008/06/status-report-week-5.html</link>
	<description>&lt;p&gt;This week I was implementing Mirtich's V-Clip algorithm for collision detection.&lt;/p&gt;
&lt;p&gt;Also I found several bugs in my functions, which took some time to fix. To check the code I used QuickCheck properties. I expect to finish V-Clip during the first half of the following week, if everthing goes fine.&lt;/p&gt;
&lt;p&gt;I also found time to cabalize and haddockize Hpysics. Note that you need haddock 2 to build docs, because earlier versions don't like parallel arrays syntax.&lt;/p&gt;
&lt;p&gt;Also, there was an interesting challenge with QuickCheck. To test some things I need to generate non-zero vectors. I tried the following:&lt;/p&gt;
&lt;pre&gt;nonzero :: Gen Vec
nonzero = do { v - arbitrary; if norm v &gt; 0 then v else nonzero }&lt;/pre&gt;
&lt;p&gt;(i.e. if we got zero vector, just generate another one until we get what we want), but for some reason this code doesn't terminate. To understand why, I probably should learn more about how QuickCheck's rng works, but I won't complain if someone explains this effect :)&lt;/p&gt;</description>
	<pubDate>Sat, 28 Jun 2008 20:30:35 +0000</pubDate>
	<dc:creator>Roman Cheplyaka (noreply@blogger.com)</dc:creator>
</item>
<item>
	<title>John Goerzen (CosmicRay): Troops</title>
	<guid isPermalink="false">http://changelog.complete.org/posts/724-guid.html</guid>
	<link>http://changelog.complete.org/posts/724-Troops.html</link>
	<description>Back in 1997, long before the days of Youtube, there was a film short called Troops.  Troops is about 10 minutes long, and an absolutely hilarious piece of work.  It's done in the style of Cops, but set on Tatooine in the Star Wars universe.  Many people today credit it with kickstarting the fan film genre and inspiring what has evolved into stars of Youtube.&lt;br /&gt;
&lt;br /&gt;
I remember giving a talk at the Air Capitol Linux Users Group (Wichita, KS).  I brought with me my laptop, and had downloaded Troops onto it.  I played it for the group.  This was at a time when being able to play video on a laptop was something new and interesting, and under Linux no less, even more so.  Also, at a time when video of this size may have taken a day to download.  Everyone there loved it.  I think I used xanim to play it (remember that?)&lt;br /&gt;
&lt;br /&gt;
Anyhow, you can still download that same original file &lt;a href=&quot;http://www.theforce.net/fanfilms/shortfilms/troops/&quot;&gt;from theforce.net&lt;/a&gt;.  Or, for the less patient, just watch it here:&lt;br /&gt;
&lt;br /&gt;</description>
	<pubDate>Fri, 27 Jun 2008 23:57:37 +0000</pubDate>
	<dc:creator>nospam@example.com (John Goerzen)</dc:creator>
</item>
<item>
	<title>Edward Kmett: Memoizing Context</title>
	<guid isPermalink="false">http://comonad.com/reader/2008/memoizing-context/</guid>
	<link>http://comonad.com/reader/2008/memoizing-context/</link>
	<description>&lt;p&gt;[Edit: re-introduced the domain function]&lt;/p&gt;
&lt;p&gt;Recently Andy Gill &lt;a href=&quot;http://blog.unsafeperformio.com/?p=30&quot;&gt;posted&lt;/a&gt; a nice use of data families to memoize a narrow range of values to optimize Conal Elliott's &lt;a href=&quot;http://conal.net/blog/posts/functional-linear-maps/&quot;&gt;functional linear maps&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I've tweaked Andy's definition slightly below to use a type family for D e instead of a data family, which avoids some of the syntactic noise of the domain function when D e = e, and lets it this be used transparently in some places. This change lacks substance however, and the source code links at the bottom include the code with and without this change.&lt;/p&gt;
&lt;p&gt;Since I'm using data and type families, you'll need GHC 6.9. &lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;class&lt;/span&gt; Applicative &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; e&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt; NarrowMemo e &lt;span&gt;where&lt;/span&gt;
        &lt;span&gt;data&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; e :: * -&amp;gt; *
        &lt;span&gt;type&lt;/span&gt; D e :: *
        apply :: &lt;span&gt;&amp;#40;&lt;/span&gt;e :~* r&lt;span&gt;&amp;#41;&lt;/span&gt; -&amp;gt; D e -&amp;gt; r
        memo :: &lt;span&gt;&amp;#40;&lt;/span&gt;D e -&amp;gt; r&lt;span&gt;&amp;#41;&lt;/span&gt; -&amp;gt; &lt;span&gt;&amp;#40;&lt;/span&gt;e :~* r&lt;span&gt;&amp;#41;&lt;/span&gt;
        domain :: D e -&amp;gt; e
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;span&gt;data&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt; :~* a = MemoBool a a
        &lt;span&gt;type&lt;/span&gt; D &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt; = &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt;
        apply &lt;span&gt;&amp;#40;&lt;/span&gt;MemoBool o1 o2&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:True&quot;&gt;&lt;span&gt;True&lt;/span&gt;&lt;/a&gt; = o1
        apply &lt;span&gt;&amp;#40;&lt;/span&gt;MemoBool o1 o2&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:False&quot;&gt;&lt;span&gt;False&lt;/span&gt;&lt;/a&gt; = o2
        memo f = MemoBool &lt;span&gt;&amp;#40;&lt;/span&gt;f &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:True&quot;&gt;&lt;span&gt;True&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;f &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:False&quot;&gt;&lt;span&gt;False&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
        domain = &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:id&quot;&gt;&lt;span&gt;id&lt;/span&gt;&lt;/a&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;We can quickly add in the missing bits for the Bool demo he supplied:&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Functor&quot;&gt;&lt;span&gt;Functor&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f &lt;span&gt;&amp;#40;&lt;/span&gt;MemoBool a b&lt;span&gt;&amp;#41;&lt;/span&gt; = MemoBool &lt;span&gt;&amp;#40;&lt;/span&gt;f a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;f b&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; Applicative &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool&quot;&gt;&lt;span&gt;Bool&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        pure x = MemoBool x x
        MemoBool f g  &amp;lt; *&amp;gt; MemoBool a b = MemoBool &lt;span&gt;&amp;#40;&lt;/span&gt;f a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;g b&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;And we can automatically generate an instance of Monad for (:~*)e if we really want to:&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo e =&amp;gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Monad&quot;&gt;&lt;span&gt;Monad&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:return&quot;&gt;&lt;span&gt;return&lt;/span&gt;&lt;/a&gt; = pure
        m &amp;gt;&amp;gt;= k = memo $ apply &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; k m&lt;span&gt;&amp;#41;&lt;/span&gt; &amp;gt;&amp;gt;= apply &lt;span&gt;-- in (-&amp;gt;)e&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;And we can drop in a couple more instances to make it interesting. The tensor product:&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    NarrowMemo &lt;span&gt;&amp;#40;&lt;/span&gt;a,b&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;span&gt;data&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;a,b&lt;span&gt;&amp;#41;&lt;/span&gt; :~* e = MemoBoth &lt;span&gt;&amp;#40;&lt;/span&gt;a :~* &lt;span&gt;&amp;#40;&lt;/span&gt;b :~* e&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
        &lt;span&gt;type&lt;/span&gt; D &lt;span&gt;&amp;#40;&lt;/span&gt;a,b&lt;span&gt;&amp;#41;&lt;/span&gt; = &lt;span&gt;&amp;#40;&lt;/span&gt;D a, D b&lt;span&gt;&amp;#41;&lt;/span&gt;
        apply &lt;span&gt;&amp;#40;&lt;/span&gt;MemoBoth f&lt;span&gt;&amp;#41;&lt;/span&gt; = &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:uncurry&quot;&gt;&lt;span&gt;uncurry&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;apply . apply f&lt;span&gt;&amp;#41;&lt;/span&gt;
        memo f = MemoBoth $ memo $ \a -&amp;gt; memo &lt;span&gt;&amp;#40;&lt;/span&gt;f . &lt;span&gt;&amp;#40;&lt;/span&gt;,&lt;span&gt;&amp;#41;&lt;/span&gt; a&lt;span&gt;&amp;#41;&lt;/span&gt;
        domain = domain *** domain
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Functor&quot;&gt;&lt;span&gt;Functor&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;a,b&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f &lt;span&gt;&amp;#40;&lt;/span&gt;MemoBoth g&lt;span&gt;&amp;#41;&lt;/span&gt; = MemoBoth &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f&lt;span&gt;&amp;#41;&lt;/span&gt; g&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    Applicative &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;a,b&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        pure = MemoBoth . pure . pure
        f &amp;lt; *&amp;gt; a = MemoBoth $
                memo $ \da -&amp;gt;
                memo $ \db -&amp;gt;
                &lt;span&gt;let&lt;/span&gt; e = &lt;span&gt;&amp;#40;&lt;/span&gt;da, db&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;in&lt;/span&gt;
                apply f e &lt;span&gt;&amp;#40;&lt;/span&gt;apply a e&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;and a disjoint sum, if only so we have some more memo tables to play with.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    NarrowMemo &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; a b&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;span&gt;data&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; a b :~* e = MemoEither &lt;span&gt;&amp;#40;&lt;/span&gt;a :~* e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;b :~* e&lt;span&gt;&amp;#41;&lt;/span&gt;
        &lt;span&gt;type&lt;/span&gt; D &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; a b&lt;span&gt;&amp;#41;&lt;/span&gt; = &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;D a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;D b&lt;span&gt;&amp;#41;&lt;/span&gt;
        apply &lt;span&gt;&amp;#40;&lt;/span&gt;MemoEither l _&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:Left&quot;&gt;&lt;span&gt;Left&lt;/span&gt;&lt;/a&gt; a&lt;span&gt;&amp;#41;&lt;/span&gt; = apply l a
        apply &lt;span&gt;&amp;#40;&lt;/span&gt;MemoEither _ r&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:Right&quot;&gt;&lt;span&gt;Right&lt;/span&gt;&lt;/a&gt; b&lt;span&gt;&amp;#41;&lt;/span&gt; = apply r b
        memo f = MemoEither &lt;span&gt;&amp;#40;&lt;/span&gt;memo &lt;span&gt;&amp;#40;&lt;/span&gt;f . &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:Left&quot;&gt;&lt;span&gt;Left&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;memo &lt;span&gt;&amp;#40;&lt;/span&gt;f . &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:Right&quot;&gt;&lt;span&gt;Right&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
        domain = domain +++ domain
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Functor&quot;&gt;&lt;span&gt;Functor&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; a b&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f &lt;span&gt;&amp;#40;&lt;/span&gt;MemoEither a b&lt;span&gt;&amp;#41;&lt;/span&gt; = MemoEither &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f b&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo a, NarrowMemo b&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt;
    Applicative &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Either&quot;&gt;&lt;span&gt;Either&lt;/span&gt;&lt;/a&gt; a b&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        pure f = MemoEither &lt;span&gt;&amp;#40;&lt;/span&gt;pure f&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;pure f&lt;span&gt;&amp;#41;&lt;/span&gt;
        MemoEither f g &amp;lt; *&amp;gt; MemoEither a b = MemoEither &lt;span&gt;&amp;#40;&lt;/span&gt;f &amp;lt; *&amp;gt; a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;g &amp;lt; *&amp;gt; b&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;Now, the reason I wanted to play with this was I hacked up a memoizing state-in-context comonad a couple of weeks back using unsafePerformIO and a memo table, but using Andy's trick we can build up a pure memoizing context comonad for smaller or more regular domains.&lt;/p&gt;
&lt;p&gt;Recall the &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad-Context.html&quot;&gt;state-in-context&lt;/a&gt; comonad from category-extras.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;class&lt;/span&gt; &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#t:Comonad&quot;&gt;&lt;span&gt;Comonad&lt;/span&gt;&lt;/a&gt; w =&amp;gt; ComonadContext s w | w -&amp;gt; s &lt;span&gt;where&lt;/span&gt;
        getC :: w a -&amp;gt; s
        modifyC :: &lt;span&gt;&amp;#40;&lt;/span&gt;s -&amp;gt; s&lt;span&gt;&amp;#41;&lt;/span&gt; -&amp;gt; w a -&amp;gt; a
&amp;nbsp;
&lt;span&gt;data&lt;/span&gt; Context s a = Context &lt;span&gt;&amp;#40;&lt;/span&gt;s -&amp;gt; a&lt;span&gt;&amp;#41;&lt;/span&gt; s
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; ComonadContext s &lt;span&gt;&amp;#40;&lt;/span&gt;Context s&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        getC &lt;span&gt;&amp;#40;&lt;/span&gt;Context _ s&lt;span&gt;&amp;#41;&lt;/span&gt; = s
        modifyC m &lt;span&gt;&amp;#40;&lt;/span&gt;Context f c&lt;span&gt;&amp;#41;&lt;/span&gt; = f &lt;span&gt;&amp;#40;&lt;/span&gt;m c&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Functor&quot;&gt;&lt;span&gt;Functor&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;Context s&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f &lt;span&gt;&amp;#40;&lt;/span&gt;Context f' s&lt;span&gt;&amp;#41;&lt;/span&gt; = Context &lt;span&gt;&amp;#40;&lt;/span&gt;f . f'&lt;span&gt;&amp;#41;&lt;/span&gt; s
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; Copointed &lt;span&gt;&amp;#40;&lt;/span&gt;Context s&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:extract&quot;&gt;&lt;span&gt;extract&lt;/span&gt;&lt;/a&gt;   &lt;span&gt;&amp;#40;&lt;/span&gt;Context f a&lt;span&gt;&amp;#41;&lt;/span&gt; = f a
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#t:Comonad&quot;&gt;&lt;span&gt;Comonad&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;Context s&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:duplicate&quot;&gt;&lt;span&gt;duplicate&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;Context f a&lt;span&gt;&amp;#41;&lt;/span&gt; = Context &lt;span&gt;&amp;#40;&lt;/span&gt;Context f&lt;span&gt;&amp;#41;&lt;/span&gt; a
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;We can modify the definition to replace (-&gt;) with the version above of Andy's (:~*) to obtain a narrowly memoized version:&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;data&lt;/span&gt; NarrowContext e a = NarrowContext &lt;span&gt;&amp;#40;&lt;/span&gt;e :~* a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;D e&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo e =&amp;gt; &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Functor&quot;&gt;&lt;span&gt;Functor&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:fmap&quot;&gt;&lt;span&gt;fmap&lt;/span&gt;&lt;/a&gt; f &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext t d&lt;span&gt;&amp;#41;&lt;/span&gt; = NarrowContext &lt;span&gt;&amp;#40;&lt;/span&gt;memo &lt;span&gt;&amp;#40;&lt;/span&gt;f . apply t&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; d
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo e =&amp;gt; Copointed &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:extract&quot;&gt;&lt;span&gt;extract&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext t d&lt;span&gt;&amp;#41;&lt;/span&gt; = apply t d
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo e =&amp;gt; &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#t:Comonad&quot;&gt;&lt;span&gt;Comonad&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:duplicate&quot;&gt;&lt;span&gt;duplicate&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext f a&lt;span&gt;&amp;#41;&lt;/span&gt; =
                NarrowContext &lt;span&gt;&amp;#40;&lt;/span&gt;memo &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext f&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; a
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; NarrowMemo e =&amp;gt; ComonadContext &lt;span&gt;&amp;#40;&lt;/span&gt;D e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext e a&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        getC &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext _ e&lt;span&gt;&amp;#41;&lt;/span&gt; = e
        modifyC f &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowContext g e&lt;span&gt;&amp;#41;&lt;/span&gt; = apply g &lt;span&gt;&amp;#40;&lt;/span&gt;f e&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;Now any computation done in this modified state-in-context comonad is memoized and compositions of those computations are also memoized and built up from the memoized intermediate steps.&lt;/p&gt;
&lt;p&gt;We should be able to play similar games with a lot of other (co)monads that use exponentials as well.&lt;/p&gt;
&lt;p&gt;For instance (:~*) itself can play the role of a narrowly-memoized anonymous exponential comonad.&lt;/p&gt;
&lt;pre class=&quot;haskell&quot;&gt;&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo e, Monoid &lt;span&gt;&amp;#40;&lt;/span&gt;D e&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt; Copointed &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:extract&quot;&gt;&lt;span&gt;extract&lt;/span&gt;&lt;/a&gt; t = apply t mempty
&amp;nbsp;
&lt;span&gt;instance&lt;/span&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;NarrowMemo e, Monoid &lt;span&gt;&amp;#40;&lt;/span&gt;D e&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; =&amp;gt; &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#t:Comonad&quot;&gt;&lt;span&gt;Comonad&lt;/span&gt;&lt;/a&gt; &lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;:~*&lt;span&gt;&amp;#41;&lt;/span&gt; e&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;where&lt;/span&gt;
        &lt;a href=&quot;http://comonad.com/haskell/category-extras/dist/doc/html/category-extras/Control-Comonad.html#v:duplicate&quot;&gt;&lt;span&gt;duplicate&lt;/span&gt;&lt;/a&gt; f = memo $ m -&amp;gt; memo &lt;span&gt;&amp;#40;&lt;/span&gt;apply f . mappend m&lt;span&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;[ &lt;a href=&quot;http://comonad.com/haskell/posts/NarrowContext.hs&quot;&gt;Source Code (using data families only)&lt;/a&gt; ]&lt;br /&gt;
[ &lt;a href=&quot;http://comonad.com/haskell/posts/NarrowContextWithTypeFamilies.hs&quot;&gt;Source Code (using data and type families)&lt;/a&gt; ]&lt;/p&gt;</description>
	<pubDate>Fri, 27 Jun 2008 02:38:38 +0000</pubDate>
	<dc:creator>Edward Kmett</dc:creator>
</item>

</channel>
</rss>
