<p>It looks to me like Wadler made a typo. Even great minds like his slip up like that sometimes. However, I do have some comments below on your code.</p>
<p>On Aug 9, 2012 8:53 PM, &quot;Stayvoid&quot; &lt;<a href="mailto:stayvoid@gmail.com">stayvoid@gmail.com</a>&gt; wrote:</p>
<p>&gt; I tried to implement it in Haskell:<br>
&gt; (I&#39;m a newbie. I guess it&#39;s possible to write a better version.)<br>
&gt;<br>
&gt; module Param where<br>
&gt; import Prelude</p>
<p>The prelude is imported automatically. You only need to mention it as an import if you need to *avoid* importing some functions, or want some functions to be imported only &quot;qualified&quot;. This is done if you want to use a name that clashes with one in the prelude. You&#39;ll see things like<br>

import Prelude hiding (foldl&#39;,foldl, foldr)<br>
import Prelude qualified as P<br>
in a module implementing a data structure that supports folds.</p>
<p>&gt;<br>
&gt; odds :: [Int] -&gt; [Int]<br>
&gt; odds [] = []</p>
<p>This is a very awkward approach. There&#39;s no reason to have a special case for the one-element list, and certainly no reason to use ++ to add a single element to the front of a list. You should do the work in the (x:xs) case instead:</p>

<p>odds [] = []<br>
odds (x:xs)<br>
  | odd x = x : odds xs<br>
  | otherwise = odds xs</p>
<p>In fact, there&#39;s a function called &quot;filter&quot; that captures this pattern, so you can even write:</p>
<p>odds = filter odd</p>
<p>&gt; odds [x] = if odd x<br>
&gt;            then [x]<br>
&gt;            else []<br>
&gt; odds (x:xs) = if odds [x] == []<br>
&gt;               then odds xs<br>
&gt;               else [x] ++ odds xs<br>
&gt;<br>
&gt; inc :: [Int] -&gt; [Int]<br>
&gt; inc [] = error &quot;Empty list&quot;<br>
&gt; inc [x] = [succ x]<br>
&gt; inc (x:xs) = inc [x] ++ inc xs</p>
<p>Again, this is bizarre. You should be writing:</p>
<p>inc [] = []<br>
inc (x:xs) = succ x : inc xs</p>
<p>Again, there is a function that captures this pattern, so you can shorten it to</p>
<p>inc = map succ</p>
<p>&gt;<br>
&gt; Looks fine:<br>
&gt;<br>
&gt; *Param&gt; odds [1,2,3]<br>
&gt; [1,3]<br>
&gt; *Param&gt; inc [1,2,3]<br>
&gt; [2,3,4]<br>
&gt;<br>
&gt; But my results differ from the paper&#39;s:<br>
&gt;<br>
&gt; *Param&gt; inc (odds [1,2,3])<br>
&gt; [2,4]<br>
&gt; *Param&gt; odds (inc [1,2,3])<br>
&gt; [3]<br>
&gt;<br>
&gt; I doubt that there is an error in the paper.</p>
<p>I don&#39;t.<br>
</p>