Write out more types and it&#39;ll get more clear.<div><br></div><div>f is [Int] -&gt; IO [Int]</div><div><br></div><div>lst is f applied to Num a =&gt; [a], so it is of type IO [Int]</div><div><br></div><div>fmap is applied to lst, which means it&#39;s &quot;stepping inside&quot; the IO. That means it&#39;s applying +1 to [1,2,3,4,5], which doesn&#39;t make much sense unless you have a Num instance for [Int]. That&#39;s what the error was saying.</div>
<div><br></div><div>What you probably want is fmap (fmap (+1)) lst.</div><div><br></div><div>Not sure why you&#39;re doing this stuff in the first place though, since the return into IO is only restricting what you can do with it. Also, the do in both cases is unnecessary (in the second case you can replace the let with a let..in)</div>
<div><br></div><div>Hope this helps,</div><div>Dan</div><div><br><div class="gmail_quote">On Fri, Dec 17, 2010 at 12:04 PM, michael rice <span dir="ltr">&lt;<a href="mailto:nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="top" style="font:inherit"><span style="font-family:courier,monaco,monospace,sans-serif">I don&#39;t understand this error message. Haskell appears not to understand that 1 is a Num.<br>
<br>Prelude&gt; :t 1<br>1 :: (Num t) =&gt; t<br>Prelude&gt; :t [1,2,3,4,5]<br>[1,2,3,4,5] :: (Num t) =&gt; [t]<br>Prelude&gt; <br><br>Michael<br><br>===================<br><br>f :: [Int] -&gt; IO [Int]</span><br style="font-family:courier,monaco,monospace,sans-serif">
<span style="font-family:courier,monaco,monospace,sans-serif">f lst = do return lst</span><br style="font-family:courier,monaco,monospace,sans-serif"><br style="font-family:courier,monaco,monospace,sans-serif"><span style="font-family:courier,monaco,monospace,sans-serif">main = do let lst = f [1,2,3,4,5]</span><br style="font-family:courier,monaco,monospace,sans-serif">
<span style="font-family:courier,monaco,monospace,sans-serif">          fmap (+1) lst</span><br style="font-family:courier,monaco,monospace,sans-serif"><br>===============================<br><br>Prelude&gt; :l test<br>[1 of 1] Compiling Main             ( test.hs, interpreted )<br>
<br>test.hs:5:17:<br>    No instance for (Num [Int])<br>      arising from the literal `1&#39; at test.hs:5:17<br>    Possible fix: add an instance declaration for (Num [Int])<br>    In the second argument of `(+)&#39;, namely `1&#39;<br>
    In the first argument of `fmap&#39;, namely `(+ 1)&#39;<br>    In the expression: fmap (+ 1) lst<br>Failed, modules loaded: none.<br>Prelude&gt; <br></td></tr></tbody></table><br>

      <br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>